RustSec logo

History ⋅ Edit ⋅ JSON (OSV)

RUSTSEC-2026-0395

Use-after-free with CParameter::StableInBuffer

Reported
Issued
Package
zstd-safe (crates.io)
Type
INFO Unsound
Categories
Keywords
#use-after-free #experimental
References
Patched
  • >=8.2.0
Unaffected
  • <4.1.0
Affected Functions
Version
zstd_safe::CCtx::set_parameter
  • >=4.1.0, <8.2.0

Description

With CParameter::StableInBuffer(true) (experimental feature), the C library keeps a pointer to the input of one streaming call and reads from it in later calls, including flush_stream and end_stream, which take no input. An InBuffer only borrows its slice for one call, so safe code could free it in between, and freed memory was compressed into the frame. The C library behaves this way since zstd 1.5.4, whether bundled or linked from the system.

The flaw was corrected by refusing to enable the parameter.

Advisory available under CC0-1.0 license.