RUSTSEC-2026-0406None▾ SunlitUse-after-free when changing a multithreaded context with an unfinished frame
▾ Sunlit zone — Low / medium · no exploitation signal
impact 2.8 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
When a multithreaded frame (zstdmt feature, CParameter::NbWorkers) is
left unfinished, its jobs may still be running on the worker threads: the C
library only waits for them when the next frame starts, or when the context
is freed. A session reset makes the context accept changes again in the
meantime, so:
load_dictionary, ref_cdict, ref_prefix,
disable_dictionary, init*, or reset with parameters) freed the
dictionary a worker was still compressing against;NbWorkers made the next frame resize the job table before
waiting for the old jobs.The flaw was corrected by refusing these calls while a multithreaded frame
is unfinished. The new CCtx::wait_for_workers() waits for the workers
first.
zstd-safe >= 0.0.0-0, < 8.2.0Upgrade to a patched release:
zstd-safe 8.2.0Connected by shared product, vendor, weakness, or advisory.
RUSTSEC-2026-0405NoneOut-of-bounds read with an out-of-range `InBuffer::pos`
RUSTSEC-2026-0404NoneDouble free in `DCtx::try_clone`
RUSTSEC-2026-0403NoneUninitialized memory exposed when streaming decompression of a legacy frame fails
RUSTSEC-2026-0402NoneHeap buffer overflow in `CCtx::try_clone` on a multithreaded context
RUSTSEC-2026-0401NoneOut-of-bounds read in `train_from_buffer` when sample sizes overflow
RUSTSEC-2026-0399NoneUse-after-free through `init_using_cdict` and `init_using_ddict`