RustSec logo

HistoryEditJSON (OSV)

RUSTSEC-2026-0256

Panic-safety unsoundness in truncate_back, truncate_front, clear, and extend_from_slice (use-after-free / double-free)

Reported
Issued
Package
circular-buffer (crates.io)
Type
INFO Unsound
Categories
Keywords
#panic-safety #memory-safety #use-after-free #double-free
References
Patched
  • >=2.0.1
Affected Functions
Version
circular_buffer::CircularBuffer::clear
  • <2.0.1
circular_buffer::CircularBuffer::extend_from_slice
  • <2.0.1
circular_buffer::CircularBuffer::truncate_back
  • <2.0.1
circular_buffer::CircularBuffer::truncate_front
  • <2.0.1

Description

Several methods in circular-buffer drop elements before updating the buffer's start/end metadata. If an element's Drop panics during the drop, the metadata update is skipped, so the buffer still treats the already-dropped elements as live. When the buffer is later dropped (or used after the panic is caught), those elements are visited again — a use-after-free / double-free reachable from safe Rust.

Impact

Reachable entirely from safe Rust via catch_unwind with element types whose Drop can panic.

Fix

Fixed in circular-buffer 2.0.1 by adjusting the buffer's start/end metadata before the elements are dropped.

Advisory available under CC0-1.0 license.