[Cc Sasha] On Sun, Sep 08, 2024 at 01:26:32PM +0200, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 6.1-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > To reproduce the conflict and resubmit, you may use the following commands: > > git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y > git checkout FETCH_HEAD > git cherry-pick -x a5a3c952e82c1ada12bf8c55b73af26f1a454bd2 > # <resolve conflicts, build, test, etc.> > git commit -s > git send-email --to '<stable@xxxxxxxxxxxxxxx>' --in-reply-to '2024090831-camera-backlands-a643@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^.. > > Possible dependencies: > > a5a3c952e82c ("rust: macros: provide correct provenance when constructing THIS_MODULE") > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From a5a3c952e82c1ada12bf8c55b73af26f1a454bd2 Mon Sep 17 00:00:00 2001 > From: Boqun Feng <boqun.feng@xxxxxxxxx> > Date: Wed, 28 Aug 2024 11:01:29 -0700 > Subject: [PATCH] rust: macros: provide correct provenance when constructing > THIS_MODULE > > Currently while defining `THIS_MODULE` symbol in `module!()`, the > pointer used to construct `ThisModule` is derived from an immutable > reference of `__this_module`, which means the pointer doesn't have > the provenance for writing, and that means any write to that pointer > is UB regardless of data races or not. However, the usage of > `THIS_MODULE` includes passing this pointer to functions that may write > to it (probably in unsafe code), and this will create soundness issues. > > One way to fix this is using `addr_of_mut!()` but that requires the > unstable feature "const_mut_refs". So instead of `addr_of_mut()!`, > an extern static `Opaque` is used here: since `Opaque<T>` is transparent > to `T`, an extern static `Opaque` will just wrap the C symbol (defined > in a C compile unit) in an `Opaque`, which provides a pointer with > writable provenance via `Opaque::get()`. This fix the potential UBs > because of pointer provenance unmatched. > > Reported-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> > Signed-off-by: Boqun Feng <boqun.feng@xxxxxxxxx> > Reviewed-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> > Reviewed-by: Trevor Gross <tmgross@xxxxxxxxx> > Reviewed-by: Benno Lossin <benno.lossin@xxxxxxxxx> > Reviewed-by: Gary Guo <gary@xxxxxxxxxxx> > Closes: https://rust-for-linux.zulipchat.com/#narrow/stream/x/topic/x/near/465412664 > Fixes: 1fbde52bde73 ("rust: add `macros` crate") > Cc: stable@xxxxxxxxxxxxxxx # 6.6.x: be2ca1e03965: ("rust: types: Make Opaque::get const") > Link: https://lore.kernel.org/r/20240828180129.4046355-1-boqun.feng@xxxxxxxxx > [ Fixed two typos, reworded title. - Miguel ] > Signed-off-by: Miguel Ojeda <ojeda@xxxxxxxxxx> > > diff --git a/rust/macros/module.rs b/rust/macros/module.rs > index 411dc103d82e..7a5b899e47b7 100644 > --- a/rust/macros/module.rs > +++ b/rust/macros/module.rs > @@ -217,7 +217,11 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream { > // freed until the module is unloaded. > #[cfg(MODULE)] > static THIS_MODULE: kernel::ThisModule = unsafe {{ > - kernel::ThisModule::from_ptr(&kernel::bindings::__this_module as *const _ as *mut _) > + extern \"C\" {{ > + static __this_module: kernel::types::Opaque<kernel::bindings::module>; As Gary mentioned: https://lore.kernel.org/stable/20240910105557.7ada99d1.gary@xxxxxxxxxxx/ `Opaque` doesn't exist in 6.1. We could use `UnsafeCell` here to replace `Opaque`. I will send a backport patch later today if needed. Regards, Boqun > + }} > + > + kernel::ThisModule::from_ptr(__this_module.get()) > }}; > #[cfg(not(MODULE))] > static THIS_MODULE: kernel::ThisModule = unsafe {{ >