RustSec logo

HistoryEditJSON (OSV)

RUSTSEC-2026-0298

Use-after-free when a future's Drop panics while the container is dropped

Reported
Issued
Package
unicycle (crates.io)
Type
Vulnerability
Categories
Keywords
#memory-safety #use-after-free #panic-safety
Aliases
References
Patched
  • >=0.10.3
Affected Functions
Version
unicycle::Unordered::drop
  • <0.10.3

Description

Storage::clear walks the slab, empties each entry and frees the Task allocation once its reference count reaches zero. self.tasks.set_len(0) only runs after the loop.

Emptying an entry drops the user future it holds, and T carries no bounds excluding a panicking Drop. If one unwinds, the length is never committed and self.tasks still holds the pointers already processed. Drop for Storage calls clear again, and the second pass dereferences (*task.as_ptr()).entry on allocations the first pass already freed — a use-after-free (CWE-416) reachable from safe Rust.

Storage is reached only through Unordered, whose Drop calls clear. No particular method call is needed; dropping the container is enough.

Mitigation

Update to 0.10.3.

Advisory available under CC0-1.0 license.