Re: [PATCH v4] rust: num: restrict bool conversion to unsigned Bounded
Miguel Ojeda <[email protected]>
| Newsgroups | org.kernel.vger.rust-for-linux,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <CANiq72mOfR33s4y+Ueivd5NrC5yre+Pcp57ZOBz0msw9A4AP1Q@mail.gmail.com> |
On Sat, Aug 22, 2026 at 10:45 AM Younes Akhouayri via B4 Relay <[email protected]> wrote: > > From: Younes Akhouayri <[email protected]> > > From<bool> turns true into 1. A signed Bounded with N = 1 can hold > only -1 and 0. The current implementation can therefore create a value > that breaks Bounded's invariant. Deref relies on that invariant and > calls unreachable_unchecked() when it is broken, so safe Rust can reach > undefined behavior. > > The other primitive conversions require the source and destination to > have the same signedness. Treat bool as an unsigned one-bit value and > allow conversions between bool and Bounded only when the backing integer > type is unsigned. > > Fixes: 01e345e82ec3 ("rust: num: add Bounded integer wrapping type") > Closes: https://lore.kernel.org/rust-for-linux/[email protected]/ > Cc: [email protected] > Suggested-by: Alexandre Courbot <[email protected]> > Assisted-by: Codex:gpt-5.6-sol > Signed-off-by: Younes Akhouayri <[email protected]> Applied to `rust-fixes` -- thanks everyone! Reviewing this with an LLM made me notice that we should probably seal `Integer` or make it `unsafe`, because currently someone can buggily/maliciously implement it to still trigger UB regardless of this fix. Cheers, Miguel