diff --git a/crates/sized-chunks/RUSTSEC-0000-0000.md b/crates/sized-chunks/RUSTSEC-0000-0000.md new file mode 100644 index 0000000000..cad991cf89 --- /dev/null +++ b/crates/sized-chunks/RUSTSEC-0000-0000.md @@ -0,0 +1,35 @@ +```toml +[advisory] +id = "RUSTSEC-0000-0000" +package = "sized-chunks" +date = "2026-08-11" +categories = ["memory-corruption"] +keywords = ["panic-safety", "memory-safety", "use-after-free", "double-free"] +informational = "unsound" + +[affected] +[affected.functions] +"sized_chunks::InlineArray::clear" = ["<= 0.7.0"] +"sized_chunks::Chunk::clear" = ["<= 0.7.0"] +"sized_chunks::Chunk::drop_left" = ["<= 0.7.0"] +"sized_chunks::Chunk::drop_right" = ["<= 0.7.0"] +"sized_chunks::RingBuffer::clear" = ["<= 0.7.0"] +"sized_chunks::RingBuffer::drop_left" = ["<= 0.7.0"] +"sized_chunks::RingBuffer::drop_right" = ["<= 0.7.0"] + +[versions] +patched = [] +``` + +# Panic-safety unsoundness in `Chunk`, `RingBuffer`, and `InlineArray` (use-after-free / double-free) + +Several methods in `sized-chunks` drop elements before updating the length/boundary metadata. If an element's `Drop` panics during the drop, the metadata update is skipped, so the container still treats the already-dropped elements as live. When the container's own `Drop` runs, those elements are visited again — a use-after-free / double-free reachable from safe Rust. + +The `RingBuffer` methods require the `ringbuffer` feature. This is distinct from RUSTSEC-2020-0041 (`Chunk::clone` / `insert_from`, fixed in 0.6.3); the methods here are still affected in 0.7.0. The repository is archived with issues/PRs disabled and no fix available. + +## 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`. + +Reachable entirely from safe Rust via `catch_unwind` with element types whose `Drop` can panic.