Skip to content

Prepare v0.10.1: deprecate feature log#1763

Merged
dhardy merged 3 commits into
masterfrom
push-qmwpoxslllum
Apr 11, 2026
Merged

Prepare v0.10.1: deprecate feature log#1763
dhardy merged 3 commits into
masterfrom
push-qmwpoxslllum

Conversation

@dhardy

@dhardy dhardy commented Apr 9, 2026

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Deprecates the log feature and removes the log dependency.

Motivation

It has been reported (by @lopopolo) that the rand library is unsound (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:

  • The log and thread_rng features are enabled
  • A custom logger is defined
  • The custom logger accesses rand::rng() (previously rand::thread_rng()) and calls any TryRng (previously RngCore) methods on ThreadRng
  • The ThreadRng (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
  • Trace-level logging is enabled or warn-level logging is enabled and the random source (the getrandom crate) is unable to provide a new seed

TryRng (previously RngCore) methods for ThreadRng use unsafe code to cast *mut BlockRng<ReseedingCore> to &mut BlockRng<ReseedingCore>. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of aliased mutable references is Undefined Behaviour, the behaviour of optimized builds is hard to predict.

Affected versions of rand are >= 0.7, < 0.9.3 and 0.10.0.

@dhardy
dhardy requested review from newpavlov and tarcieri April 9, 2026 16:07
@dhardy
dhardy force-pushed the push-qmwpoxslllum branch from 6096153 to b407df4 Compare April 9, 2026 16:12
Comment thread CHANGELOG.md Outdated
@dhardy
dhardy force-pushed the push-qmwpoxslllum branch from 51e3c5a to 605731b Compare April 11, 2026 10:13
@dhardy
dhardy merged commit 27ff4cb into master Apr 11, 2026
17 checks passed
@dhardy
dhardy deleted the push-qmwpoxslllum branch April 11, 2026 10:34
kodiakhq Bot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.

Changelog
Sourced from rand's changelog.

[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes

Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)

#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes

The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)

Additions

Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)

Removals

Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)

#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697


... (truncated)


Commits

27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
This was referenced Jun 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants