diff --git a/crates/sp-sized-chunks/RUSTSEC-0000-0000.md b/crates/sp-sized-chunks/RUSTSEC-0000-0000.md new file mode 100644 index 000000000..30e65caf1 --- /dev/null +++ b/crates/sp-sized-chunks/RUSTSEC-0000-0000.md @@ -0,0 +1,32 @@ +```toml +[advisory] +id = "RUSTSEC-0000-0000" +package = "sp-sized-chunks" +date = "2026-08-11" +categories = ["memory-corruption"] +keywords = ["panic-safety", "memory-safety", "use-after-free", "double-free"] +informational = "unsound" + +[affected] +[affected.functions] +"sp_sized_chunks::Chunk::clear" = ["<= 0.1.0"] +"sp_sized_chunks::Chunk::drop_left" = ["<= 0.1.0"] +"sp_sized_chunks::Chunk::drop_right" = ["<= 0.1.0"] +"sp_sized_chunks::InlineArray::clear" = ["<= 0.1.0"] + +[versions] +patched = [] +``` + +# Panic-safety unsoundness in `Chunk` and `InlineArray` (use-after-free / double-free) + +Several methods in `sp-sized-chunks` drop elements before updating the container's 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 is later dropped, its own `Drop` re-visits those slots and drops the freed elements again — a use-after-free / double-free reachable from safe Rust. + +`sp-sized-chunks` is a fork of `sized-chunks` (companion advisory filed separately) and carries the same bug. The repository is archived and the crate is still on 0.1.0 with no fix available. + +## Impact + +- **CWE-415 (Double Free):** the same allocation is freed twice (e.g. an element holding `Box`). +- **CWE-416 (Use-After-Free):** an element reads its own freed allocation during `Drop` (e.g. `String`) — confirmed under AddressSanitizer. + +All are reachable from safe Rust via `catch_unwind` with element types whose `Drop` can panic.