RUSTSEC-2026-0293None▾ SunlitDouble free / use-after-free in `Consumer::skip` and `Consumer::clear` when an element's `Drop` panics
▾ 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.
Consumer::skip() and Consumer::clear() are not panic-safe. They drop the
consumed elements in place and only afterwards call advance_read_index() to move
the ring buffer's read index past them. If an element's Drop panics mid-loop,
advance_read_index() is never reached, so the read index still points at the
already-dropped elements. When the ring buffer is later dropped, its destructor
re-visits those slots and drops the same elements a second time — a double free
(CWE-415) / use-after-free (CWE-416) reachable from safe Rust, confirmed under
AddressSanitizer.
Consumer::clear() delegates to Consumer::skip(self.len()), so both share the
same root cause and the same fix.
Update to 0.5.2 or later (fixed in agerasev/ringbuf#60).
ringbuf >= 0.0.0-0, < 0.5.2Upgrade to a patched release:
ringbuf 0.5.2