]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Mar 2025 16:32:44 +0000 (17:32 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Mar 2025 16:32:44 +0000 (17:32 +0100)
added patches:
rust-init-fix-zeroable-implementation-for-option-nonnull-t-and-option-kbox-t.patch

queue-6.6/rust-init-fix-zeroable-implementation-for-option-nonnull-t-and-option-kbox-t.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/rust-init-fix-zeroable-implementation-for-option-nonnull-t-and-option-kbox-t.patch b/queue-6.6/rust-init-fix-zeroable-implementation-for-option-nonnull-t-and-option-kbox-t.patch
new file mode 100644 (file)
index 0000000..1eda94d
--- /dev/null
@@ -0,0 +1,54 @@
+From df27cef153603b18a7d094b53cc3d5264ff32797 Mon Sep 17 00:00:00 2001
+From: Benno Lossin <benno.lossin@proton.me>
+Date: Wed, 5 Mar 2025 13:29:01 +0000
+Subject: rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>`
+
+From: Benno Lossin <benno.lossin@proton.me>
+
+commit df27cef153603b18a7d094b53cc3d5264ff32797 upstream.
+
+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]
+Reported-by: Alice Ryhl <aliceryhl@google.com>
+Closes: https://lore.kernel.org/rust-for-linux/CAH5fLghL+qzrD8KiCF1V3vf2YcC6aWySzkmaE2Zzrnh1gKj-hw@mail.gmail.com/
+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>
+Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
+Link: https://lore.kernel.org/r/20250305132836.2145476-1-benno.lossin@proton.me
+[ Added Closes tag and moved up the Reported-by one. - Miguel ]
+Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ rust/kernel/init.rs |   11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+--- a/rust/kernel/init.rs
++++ b/rust/kernel/init.rs
+@@ -1310,17 +1310,14 @@ 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<Box<T>>,
++    {<T>} Option<NonNull<T>>,
++    {<T>} Option<Box<T>>,
+     // SAFETY: `null` pointer is valid.
+     //
index b754eeecd86dd4e79cff325d12328bea6a05925a..93e3a8a3fb0ff2d9d4fc0bb332507b766ba0a19b 100644 (file)
@@ -140,3 +140,4 @@ arm64-mm-populate-vmemmap-at-the-page-level-if-not-section-aligned.patch
 qlcnic-fix-memory-leak-issues-in-qlcnic_sriov_common.c.patch
 smb-client-fix-regression-with-guest-option.patch
 rust-disallow-btf-generation-with-rust-lto.patch
+rust-init-fix-zeroable-implementation-for-option-nonnull-t-and-option-kbox-t.patch