GHSA-924w-mwc9-86m8
Aliasing violations in splice, mutable iteration and cursors
Four code paths create a pointer whose permission is later revoked, then
write through it. Miri reports each as undefined behaviour under both the
Tree Borrows and Stacked Borrows aliasing models (CWE-758). All four are
reachable from safe code with standard Ord types.
- Splice back-pointer.
split_off,split_off_indexandappendstored the first spliced node'sprevpointer from a reference to the head, then wrote through that same reference, invalidating the stored pointer. A laterpop_firstorpop_frontwrites through it. This affects all four collections. SkipMap::range_mutback pointer. With anIncludedorExcludedupper bound, the back pointer came from a shared reference.next_backhands out&mut Vthrough it, and writing to that value is undefined behaviour.IterMut::next_backreads a yielded node. InSkipListandSkipMap,next_backread the predecessor node even after the front end had yielded it as&mut. The read freezes the caller's reference, and the caller's next write through it is undefined behaviour. This affectsiter_mut,values_mutandrange_mutused from both ends.- Cursor list pointer.
lower_bound_mutandupper_bound_mutonOrderedSkipListandSkipSet(cursorfeature) took the cursor's list pointer, then searched through&self. A comparator with interior-mutable state, such as aCellcall counter, wrote to the list's memory through that shared borrow and invalidated the cursor's pointer. The comparator can be a fully consistent order.SkipMapcursors are not affected.
No miscompilation has been observed in an optimised build. A future compiler may still optimise on the violated aliasing assumptions.
The flaws were corrected in 1.3.0. Each fix derives the pointer used for mutation from the collection's long-lived allocation pointers, and each has a Miri regression test.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- Low
What each source reports
OSV Score usedRUSTSEC-2026-0408 2.1
Aliasing violations in splice, mutable iteration and cursors
Four code paths create a pointer whose permission is later revoked, then
write through it. Miri reports each as undefined behaviour under both the
Tree Borrows and Stacked Borrows aliasing models (CWE-758). All four are
reachable from safe code with standard Ord types.
- Splice back-pointer.
split_off,split_off_indexandappendstored the first spliced node'sprevpointer from a reference to the head, then wrote through that same reference, invalidating the stored pointer. A laterpop_firstorpop_frontwrites through it. This affects all four collections. SkipMap::range_mutback pointer. With anIncludedorExcludedupper bound, the back pointer came from a shared reference.next_backhands out&mut Vthrough it, and writing to that value is undefined behaviour.IterMut::next_backreads a yielded node. InSkipListandSkipMap,next_backread the predecessor node even after the front end had yielded it as&mut. The read freezes the caller's reference, and the caller's next write through it is undefined behaviour. This affectsiter_mut,values_mutandrange_mutused from both ends.- Cursor list pointer.
lower_bound_mutandupper_bound_mutonOrderedSkipListandSkipSet(cursorfeature) took the cursor's list pointer, then searched through&self. A comparator with interior-mutable state, such as aCellcall counter, wrote to the list's memory through that shared borrow and invalidated the cursor's pointer. The comparator can be a fully consistent order.SkipMapcursors are not affected.
No miscompilation has been observed in an optimised build. A future compiler may still optimise on the violated aliasing assumptions.
The flaws were corrected in 1.3.0. Each fix derives the pointer used for mutation from the collection's long-lived allocation pointers, and each has a Miri regression test.
- Record
RUSTSEC-2026-0408- CVSS 4.0
- 2.1 Low
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
skiplistcrates.io | 0.0.0-0 up to 1.3.0 | 1.3.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
GHSA-924w-mwc9-86m8 is a low vulnerability (CVSS 2.1) in skiplist, published October 24, 2026. No source lists public exploit code. Fixed in skiplist 1.3.0.