Am 05.10.24 um 00:01 schrieb Mitchell Levy via B4 Relay:
From: Mitchell Levy levymitchell0@gmail.com
Currently, dynamically allocated LockCLassKeys can be used from the Rust side without having them registered. This is a soundness issue, so remove them.
Suggested-by: Alice Ryhl aliceryhl@google.com Link: https://lore.kernel.org/rust-for-linux/20240815074519.2684107-3-nmi@metaspac... Cc: stable@vger.kernel.org Signed-off-by: Mitchell Levy levymitchell0@gmail.com
rust/kernel/lib.rs | 2 +- rust/kernel/sync.rs | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-)
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 22a3bfa5a9e9..b5f4b3ce6b48 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -44,8 +44,8 @@ pub mod page; pub mod prelude; pub mod print; -pub mod sizes; pub mod rbtree; +pub mod sizes; mod static_assert; #[doc(hidden)] pub mod std_vendor;
This is fixed already
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/ru...
and can be dropped here.
diff --git a/rust/kernel/sync.rs b/rust/kernel/sync.rs index 0ab20975a3b5..d270db9b9894 100644 --- a/rust/kernel/sync.rs +++ b/rust/kernel/sync.rs @@ -27,28 +27,18 @@ unsafe impl Sync for LockClassKey {} impl LockClassKey {
- /// Creates a new lock class key.
- pub const fn new() -> Self {
Self(Opaque::uninit())
- }
}pub(crate) fn as_ptr(&self) -> *mut bindings::lock_class_key { self.0.get() }
-impl Default for LockClassKey {
- fn default() -> Self {
Self::new()
- }
-}
- /// Defines a new static lock class and returns a pointer to it. #[doc(hidden)] #[macro_export] macro_rules! static_lock_class { () => {{
static CLASS: $crate::sync::LockClassKey = $crate::sync::LockClassKey::new();
Should the SAFETY comment added in the 2nd patch go to here?
+ // SAFETY: lockdep expects uninitialized memory when it's handed a statically allocated + // lock_class_key
static CLASS: $crate::sync::LockClassKey =
}unsafe { ::core::mem::MaybeUninit::uninit().assume_init() }; &CLASS }};