Every CVE Search/ Get API key

RUSTSEC-2026-0284

Double free in `Map::into_iter` and an uninitialized `Arc` in `SharedIncin::clear`

No score

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.

Impact

  • CWE-415 (Double Free): the same allocation is freed twice.
  • CWE-416 (Use-After-Free): a freed allocation is accessed during a repeated Drop.
  • CWE-908 (Use of Uninitialized Resource): an Arc is constructed from uninitialized bytes.

Fix

No fixed release is available. The crate has had no release since 2018-11-18 and the maintainer has not responded to the report.

What each source reports

OSV No score

Double free in `Map::into_iter` and an uninitialized `Arc` in `SharedIncin::clear`

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.

Impact

  • CWE-415 (Double Free): the same allocation is freed twice.
  • CWE-416 (Use-After-Free): a freed allocation is accessed during a repeated Drop.
  • CWE-908 (Use of Uninitialized Resource): an Arc is constructed from uninitialized bytes.

Fix

No fixed release is available. The crate has had no release since 2018-11-18 and the maintainer has not responded to the report.

Record
RUSTSEC-2026-0284
Updated
2026-11-02

Affected packages

Affected packages
PackageAffectedFixed
lockfree
crates.io
0.0.0-0 and later None known

History

History
RecordedChangedSources
first indexedOSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

RUSTSEC-2026-0284 is a vulnerability with no CVSS score yet in lockfree, published August 26, 2026. No source lists public exploit code. No source names a fixed version.

References

MoveEnter Open