Zstd safe: Use-after-free when changing a multithreaded context with an unfinished frame
Affects zstd-safeSource GCVE Database
Rated by Threat Radar
- Patch
- Available – fixed in 8.2.0
Data as of 26 Oct 2026, 16:13 UTC
What to do
Upgrade zstd-safe to 8.2.0.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
crates.iozstd-safepkg:cargo/zstd-safeOther threats | Affected
| Fixed in
|
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
Description
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: - unloading the dictionary (`load_dictionary`, `ref_cdict`, `ref_prefix`, `disable_dictionary`, `init*`, or `reset` with parameters) freed the dictionary a worker was still compressing against; - changing `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.