RUSTSEC-2026-0284None▾ SunlitDouble free in `Map::into_iter` and an uninitialized `Arc` in `SharedIncin::clear`
▾ Sunlit zone — Low / medium · no exploitation signal
impact 2.8 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
Two independent soundness problems, both reachable from safe Rust.
Map::into_iter drops builder (the caller-supplied hasher H) and incin by
hand, then commits the ownership transfer with mem::forget(self). H::drop is
user code and may panic. If it does, mem::forget(self) is skipped and the
still-live Map unwinds, whose field drop glue destroys builder a second
time. An empty map is enough — no entries or concurrency required.
SharedIncin::clear writes mem::uninitialized::<Arc<_>>() into self.inner
before taking the real Arc out. Arc has a validity invariant, so this is
undefined behaviour at the point of creation, with no panic or concurrency
involved. Between that write and the repairing one, self.inner also holds
garbage while self is still droppable, so an unwind from incin.clear() or
Arc::new decrements a refcount through an uninitialized pointer. The
make_shared_incin! macro is instantiated five times, so this covers queue,
stack, map, channel::spmc and channel::mpmc.
Drop.Arc is constructed from uninitialized bytes.No fixed release is available. The crate has had no release since 2018-11-18 and the maintainer has not responded to the report.
lockfree >= 0.0.0-0Refer to the advisory for the patched release.