Skip to content
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions crates/sized-chunks/RUSTSEC-0000-0000.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
```toml
[advisory]
id = "RUSTSEC-0000-0000"
package = "sized-chunks"
date = "2026-08-04"
categories = ["memory-corruption"]
keywords = ["panic-safety", "memory-safety", "use-after-free", "double-free"]
informational = "unsound"

[versions]
patched = []
unaffected = []
```

# Panic-safety unsoundness in `Chunk`, `RingBuffer`, and `InlineArray` (use-after-free / double-free)

Several methods in `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.

## Affected methods

- `InlineArray::clear`
- `Chunk::clear`, `Chunk::drop_left`, `Chunk::drop_right`
- `RingBuffer::clear`, `RingBuffer::drop_left`, `RingBuffer::drop_right`
(require the `ringbuffer` feature)
Comment thread
djc marked this conversation as resolved.
Outdated

## Impact

- **CWE-415 (Double Free):** the same allocation is freed twice (e.g. an element holding `Box<T>`).
- **CWE-416 (Use-After-Free):** an element reads its own freed allocation during `Drop` (e.g. `String`) — confirmed under AddressSanitizer.

All seven are reachable entirely from safe Rust via `catch_unwind` with element types
whose `Drop` can panic.

## Status

The repository is archived and unmaintained (no release in several years), so no upstream
fix is expected. Affected users should avoid these methods with element types whose `Drop`
can panic, or migrate away from the crate.