Email me

Rust advisories / lockfree

UnsoundRUSTSEC-2026-0284 · lockfree

RUSTSEC-2026-0284: Double free in `Map::into_iter` and an uninitialized `Arc` in `SharedIncin::clear`

Short answerlockfree has an API that can cause undefined behaviour from safe code: Double free in `Map::into_iter` and an uninitialized `Arc` in `SharedIncin::clear`. No fixed version yet.

Cratelockfree
TypeUnsound (memory-corruption)
Affected versionsEvery version.
Fixed innone
Severitynot scored
Published2026-08-26
Last changed2026-09-14
Also known asnone
Affected functionslockfree::channel::mpmc::SharedIncin::clear, lockfree::channel::spmc::SharedIncin::clear, lockfree::map::Map::into_iter, lockfree::map::SharedIncin::clear, lockfree::queue::SharedIncin::clear, lockfree::stack::SharedIncin::clear

What to do

  1. Find who pulls it in: cargo tree -i lockfree.
  2. Avoid the affected API (lockfree::channel::mpmc::SharedIncin::clear, lockfree::channel::spmc::SharedIncin::clear, lockfree::map::Map::into_iter, lockfree::map::SharedIncin::clear, lockfree::queue::SharedIncin::clear, lockfree::stack::SharedIncin::clear), or replace the crate.

Details from the advisory

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.

References

From the RustSec Advisory Database (CC0-1.0) via the OSV export, downloaded Oct 24, 2026. Severity score computed from the published CVSS vector.

Up next

Are you affected?Check your whole dependency treePaste Cargo.lock: every advisory, for your exact versions.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ