Unsound LowRUSTSEC-2023-0005 · tokio
RUSTSEC-2023-0005: `tokio::io::ReadHalf<T>::unsplit` is Unsound
Short answertokio has an API that can cause undefined behaviour from safe code: `tokio::io::ReadHalf<T>::unsplit` is Unsound. Fixed in 1.18.5, 1.20.4, 1.24.2.
| Crate | tokio |
|---|---|
| Type | Unsound (memory-exposure) |
| Affected versions | From 0.2.0 before 1.18.5; from 1.19.0 before 1.20.4; from 1.21.0 before 1.24.2. |
| Fixed in | 1.18.5, 1.20.4, 1.24.2 |
| Severity | Low (GitHub rating) |
| Published | 2023-01-11 |
| Last changed | 2023-11-08 |
| Also known as | GHSA-4q83-7cq4-p6wg |
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.24.2") 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
tokio::io::ReadHalf<T>::unsplit can violate the Pin contract
The soundness issue is described in the tokio/issues#5372
Specific set of conditions needed to trigger an issue (a !Unpin type in ReadHalf) is unusual, combined with the difficulty of making any arbitrary use-after-free exploitable in Rust without doing a lot of careful alignment of data types in the surrounding code.
The tokio feature io-util is also required to be enabled to trigger this soundness issue.
Thanks to zachs18 reporting the issue to Tokio team responsibly and taiki-e and carllerche appropriately responding and fixing the soundness bug.
Tokio before 0.2.0 used futures 0.1 that did not have Pin, so it is not affected by this issue.
References
- Package: crates.io/crates/tokio
- Advisory: rustsec.org/advisories/RUSTSEC-2023-0005.html
- Report: github.com/tokio-rs/tokio/issues/5372
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-2021-0124 · 2021-11-16Data race when sending and receiving after closing a `oneshot` channel
- VulnerabilityRUSTSEC-2023-0001 · 2023-01-04reject_remote_clients Configuration corruption
- 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?