Vulnerability HighRUSTSEC-2021-0124 · tokio
RUSTSEC-2021-0124: Data race when sending and receiving after closing a `oneshot` channel
Short answerA security vulnerability in the tokio crate: Data race when sending and receiving after closing a `oneshot` channel. GitHub rates it High. Fixed in 1.13.1, 1.8.4: update to a fixed version.
| Crate | tokio |
|---|---|
| Type | Vulnerability (memory-corruption, thread-safety) |
| Affected versions | From 0.1.14 before 1.8.4; from 1.9.0 before 1.13.1. |
| Fixed in | 1.13.1, 1.8.4 |
| Severity | High (GitHub rating) |
| Published | 2021-11-16 |
| Last changed | 2023-11-08 |
| Also known as | CVE-2021-45710, GHSA-fg7r-2g4j-5cgr |
| Affected functions | tokio::sync::oneshot::Receiver::close |
What to do
- See which version you have:
cargo tree -i tokio(it also shows which of your dependencies pulls it in). - Update within your version requirement:
cargo update -p tokio. If the fix is a newer major or minor than your requirement allows, raise it in Cargo.toml (for exampletokio = "1.8.4") or update the dependency that pulls it in. - Check again with
cargo audit, or paste your Cargo.lock into our Cargo.toml checker.
Details from the advisory
If a tokio::sync::oneshot channel is closed (via the oneshot::Receiver::close method), a data race may occur if the oneshot::Sender::send method is called while the corresponding oneshot::Receiver is awaited or calling try_recv.
When these methods are called concurrently on a closed channel, the two halves of the channel can concurrently access a shared memory location, resulting in a data race. This has been observed to cause memory corruption.
Note that the race only occurs when **both** halves of the channel are used after the Receiver half has called close. Code where close is not used, or where the Receiver is not awaited and try_recv is not called after calling close, is not affected.
See tokio#4225 for more details.
References
- Package: crates.io/crates/tokio
- Advisory: rustsec.org/advisories/RUSTSEC-2021-0124.html
- Report: github.com/tokio-rs/tokio/issues/4225
From the RustSec Advisory Database (CC0-1.0) via the OSV export, downloaded Oct 24, 2026. Severity score computed from the published CVSS vector.
Other advisories for tokio
- VulnerabilityRUSTSEC-2021-0072 · 2021-07-07Task dropped in wrong thread when aborting `LocalSet` task
- VulnerabilityRUSTSEC-2023-0001 · 2023-01-04reject_remote_clients Configuration corruption
- UnsoundRUSTSEC-2023-0005 · 2023-01-11`tokio::io::ReadHalf<T>::unsplit` is Unsound
- UnsoundRUSTSEC-2025-0023 · 2025-04-07Broadcast channel calls clone in parallel, but does not require `Sync`
- VulnerabilityRUSTSEC-2026-0384 · 2026-10-21Race condition in `tokio::time::Interval` on Tokio v1.54.0
- UnsoundRUSTSEC-2026-0386 · 2026-10-13`AsyncFd::new` and related constructors violate I/O safety
Up next
Same cratetokio: security historyEvery advisory for this crate, and whether it is safe to use today.Read it next →Did this answer your question?