* [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` @ 2025-03-05 13:29 ` Benno Lossin 2025-03-05 13:32 ` Alice Ryhl ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: Benno Lossin @ 2025-03-05 13:29 UTC (permalink / raw) To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross Cc: stable, rust-for-linux, linux-kernel According to [1], `NonNull<T>` and `#[repr(transparent)]` wrapper types such as our custom `KBox<T>` have the null pointer optimization only if `T: Sized`. Thus remove the `Zeroable` implementation for the unsized case. Link: https://doc.rust-lang.org/stable/std/option/index.html#representation [1] Cc: stable@vger.kernel.org # v6.12+ (a custom patch will be needed for 6.6.y) Fixes: 38cde0bd7b67 ("rust: init: add `Zeroable` trait and `init::zeroed` function") Signed-off-by: Benno Lossin <benno.lossin@proton.me> --- rust/kernel/init.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs index 7fd1ea8265a5..8bbd5e3398fc 100644 --- a/rust/kernel/init.rs +++ b/rust/kernel/init.rs @@ -1418,17 +1418,14 @@ macro_rules! impl_zeroable { // SAFETY: `T: Zeroable` and `UnsafeCell` is `repr(transparent)`. {<T: ?Sized + Zeroable>} UnsafeCell<T>, - // SAFETY: All zeros is equivalent to `None` (option layout optimization guarantee). + // SAFETY: All zeros is equivalent to `None` (option layout optimization guarantee: + // https://doc.rust-lang.org/stable/std/option/index.html#representation). Option<NonZeroU8>, Option<NonZeroU16>, Option<NonZeroU32>, Option<NonZeroU64>, Option<NonZeroU128>, Option<NonZeroUsize>, Option<NonZeroI8>, Option<NonZeroI16>, Option<NonZeroI32>, Option<NonZeroI64>, Option<NonZeroI128>, Option<NonZeroIsize>, - - // SAFETY: All zeros is equivalent to `None` (option layout optimization guarantee). - // - // In this case we are allowed to use `T: ?Sized`, since all zeros is the `None` variant. - {<T: ?Sized>} Option<NonNull<T>>, - {<T: ?Sized>} Option<KBox<T>>, + {<T>} Option<NonNull<T>>, + {<T>} Option<KBox<T>>, // SAFETY: `null` pointer is valid. // base-commit: 7eb172143d5508b4da468ed59ee857c6e5e01da6 -- 2.48.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` 2025-03-05 13:29 ` [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Benno Lossin @ 2025-03-05 13:32 ` Alice Ryhl 2025-03-05 13:42 ` Benno Lossin ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: Alice Ryhl @ 2025-03-05 13:32 UTC (permalink / raw) To: Benno Lossin Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron, Andreas Hindborg, Trevor Gross, stable, rust-for-linux, linux-kernel On Wed, Mar 05, 2025 at 01:29:01PM +0000, Benno Lossin wrote: > According to [1], `NonNull<T>` and `#[repr(transparent)]` wrapper types > such as our custom `KBox<T>` have the null pointer optimization only if > `T: Sized`. Thus remove the `Zeroable` implementation for the unsized > case. > > Link: https://doc.rust-lang.org/stable/std/option/index.html#representation [1] > Cc: stable@vger.kernel.org # v6.12+ (a custom patch will be needed for 6.6.y) > Fixes: 38cde0bd7b67 ("rust: init: add `Zeroable` trait and `init::zeroed` function") > Signed-off-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Alice Ryhl <aliceryhl@google.com> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` 2025-03-05 13:29 ` [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Benno Lossin 2025-03-05 13:32 ` Alice Ryhl @ 2025-03-05 13:42 ` Benno Lossin 2025-03-05 18:52 ` Andreas Hindborg 2025-03-05 23:02 ` Miguel Ojeda 3 siblings, 0 replies; 5+ messages in thread From: Benno Lossin @ 2025-03-05 13:42 UTC (permalink / raw) To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross Cc: stable, rust-for-linux, linux-kernel On Wed Mar 5, 2025 at 2:29 PM CET, Benno Lossin wrote: > According to [1], `NonNull<T>` and `#[repr(transparent)]` wrapper types > such as our custom `KBox<T>` have the null pointer optimization only if > `T: Sized`. Thus remove the `Zeroable` implementation for the unsized > case. > > Link: https://doc.rust-lang.org/stable/std/option/index.html#representation [1] > Cc: stable@vger.kernel.org # v6.12+ (a custom patch will be needed for 6.6.y) > Fixes: 38cde0bd7b67 ("rust: init: add `Zeroable` trait and `init::zeroed` function") > Signed-off-by: Benno Lossin <benno.lossin@proton.me> Forgot to add this: Reported-by: Alice Ryhl <aliceryhl@google.com> --- Cheers, Benno ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` 2025-03-05 13:29 ` [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Benno Lossin 2025-03-05 13:32 ` Alice Ryhl 2025-03-05 13:42 ` Benno Lossin @ 2025-03-05 18:52 ` Andreas Hindborg 2025-03-05 23:02 ` Miguel Ojeda 3 siblings, 0 replies; 5+ messages in thread From: Andreas Hindborg @ 2025-03-05 18:52 UTC (permalink / raw) To: Benno Lossin Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron, Alice Ryhl, Trevor Gross, stable, rust-for-linux, linux-kernel "Benno Lossin" <benno.lossin@proton.me> writes: > According to [1], `NonNull<T>` and `#[repr(transparent)]` wrapper types > such as our custom `KBox<T>` have the null pointer optimization only if > `T: Sized`. Thus remove the `Zeroable` implementation for the unsized > case. > > Link: https://doc.rust-lang.org/stable/std/option/index.html#representation [1] > Cc: stable@vger.kernel.org # v6.12+ (a custom patch will be needed for 6.6.y) > Fixes: 38cde0bd7b67 ("rust: init: add `Zeroable` trait and `init::zeroed` function") > Signed-off-by: Benno Lossin <benno.lossin@proton.me> > --- Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org> Best regards, Andreas Hindborg ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` 2025-03-05 13:29 ` [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Benno Lossin ` (2 preceding siblings ...) 2025-03-05 18:52 ` Andreas Hindborg @ 2025-03-05 23:02 ` Miguel Ojeda 3 siblings, 0 replies; 5+ messages in thread From: Miguel Ojeda @ 2025-03-05 23:02 UTC (permalink / raw) To: Benno Lossin Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross, stable, rust-for-linux, linux-kernel On Wed, Mar 5, 2025 at 2:29 PM Benno Lossin <benno.lossin@proton.me> wrote: > > According to [1], `NonNull<T>` and `#[repr(transparent)]` wrapper types > such as our custom `KBox<T>` have the null pointer optimization only if > `T: Sized`. Thus remove the `Zeroable` implementation for the unsized > case. > > Link: https://doc.rust-lang.org/stable/std/option/index.html#representation [1] > Cc: stable@vger.kernel.org # v6.12+ (a custom patch will be needed for 6.6.y) > Fixes: 38cde0bd7b67 ("rust: init: add `Zeroable` trait and `init::zeroed` function") > Signed-off-by: Benno Lossin <benno.lossin@proton.me> Applied to `rust-fixes` -- thanks everyone! [ Added Closes tag and moved up the Reported-by one. - Miguel ] Cheers, Miguel ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-03-05 23:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <t9wrOFEcf8XZ-aKch1r7feu9gBB6Wqs6_KgnLoSF6eZ01wvr4zV4Rbl4McWKaM25TlwevH55D6Yy_gLi2idFLA==@protonmail.internalid>
2025-03-05 13:29 ` [PATCH] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Benno Lossin
2025-03-05 13:32 ` Alice Ryhl
2025-03-05 13:42 ` Benno Lossin
2025-03-05 18:52 ` Andreas Hindborg
2025-03-05 23:02 ` Miguel Ojeda
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).