GHSA-rvr2-r3pv-5m4p json
oneshot has potential Use After Free when used asynchronously
published 9mo ago modified 2mo ago also RUSTSEC-2026-0005
- cvss
- —
- not scored
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
There is a race condition that can lead to a use-after-free if a `oneshot::Receiver` is polled but then dropped instead of polled to completion. This could happen if the receiver future was cancelled while receiving, for example by being wrapped in a timeout future or similar.
When the `Receiver` is polled (`Future::poll`) it writes a waker to the channel and sets it to the `RECEIVING` state. If the `Receiver` was then dropped (instead of polled to completion), the `Drop` implementation on `Receiver` unconditionally swapped the channel state to `DISCONNECTED` and only after doing so it read back its waker from the heap allocation and dropped it. The problem is that the `DISCONNECTED` state could be observed by the `Sender`, which would lead to it deallocating the channel heap memory. If the `Sender` manage to free the channel before the `Receiver` managed to proceed to dropping the waker, then the `Receiver` would read from the freed channel memory (Use After Free).
The fix was submitted in https://github.com/faern/oneshot/pull/74 and published as part of `oneshot` version `0.1.12`.
Patch / fix
Is GHSA-rvr2-r3pv-5m4p in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerAffected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| crates.io | oneshot | <0.1.12 >=0.1.2-0, <0.1.12 |
0.1.12 |
Classification
References
-
github.com
/faern/oneshot/commit/d1a1506010bc48962634807d0dcca682af4f50ba
web
-
github.com
/faern/oneshot/issues/73
web, report
-
github.com
/rustsec/advisory-db/pull/2600
web
-
github.com
/faern/oneshot
package
-
rustsec.org
/advisories/RUSTSEC-2026-0005.html
web, advisory
-
crates.io
/crates/oneshot
package
Sources
- GitHub Advisory GHSA-rvr2-r3pv-5m4p
- OSV RUSTSEC-2026-0005
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.