Skip to content

Commit ac48d0a

Browse files
authored
Merge pull request #391 from wedsonaf/unsafe-init
rust: fix bug where unsafe expressions didn't require unsafe block.
2 parents e261957 + b8a334a commit ac48d0a

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

drivers/android/transaction.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ impl Transaction {
7878
let mut_tr = Arc::get_mut(&mut tr).ok_or(Error::EINVAL)?;
7979

8080
// SAFETY: `inner` is pinned behind `Arc`.
81-
kernel::spinlock_init!(Pin::new_unchecked(&mut_tr.inner), "Transaction::inner");
81+
let pinned = unsafe { Pin::new_unchecked(&mut_tr.inner) };
82+
kernel::spinlock_init!(pinned, "Transaction::inner");
8283
Ok(tr)
8384
}
8485

@@ -111,7 +112,8 @@ impl Transaction {
111112
let mut_tr = Arc::get_mut(&mut tr).ok_or(Error::EINVAL)?;
112113

113114
// SAFETY: `inner` is pinned behind `Arc`.
114-
kernel::spinlock_init!(Pin::new_unchecked(&mut_tr.inner), "Transaction::inner");
115+
let pinned = unsafe { Pin::new_unchecked(&mut_tr.inner) };
116+
kernel::spinlock_init!(pinned, "Transaction::inner");
115117
Ok(tr)
116118
}
117119

rust/kernel/sync/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ macro_rules! init_with_lockdep {
5050
($obj:expr, $name:literal) => {{
5151
static mut CLASS: core::mem::MaybeUninit<$crate::bindings::lock_class_key> =
5252
core::mem::MaybeUninit::uninit();
53+
let obj = $obj;
54+
let name = $crate::c_str!($name);
5355
// SAFETY: `CLASS` is never used by Rust code directly; the kernel may change it though.
5456
#[allow(unused_unsafe)]
5557
unsafe {
56-
$crate::sync::NeedsLockClass::init($obj, $crate::c_str!($name), CLASS.as_mut_ptr())
58+
$crate::sync::NeedsLockClass::init(obj, name, CLASS.as_mut_ptr())
5759
};
5860
}};
5961
}

samples/rust/rust_semaphore.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,12 @@ impl KernelModule for RustSemaphore {
133133
},
134134
|sema| {
135135
// SAFETY: `changed` is pinned when `sema` is.
136-
condvar_init!(Pin::new_unchecked(&sema.changed), "Semaphore::changed");
136+
let pinned = unsafe { Pin::new_unchecked(&sema.changed) };
137+
condvar_init!(pinned, "Semaphore::changed");
137138

138139
// SAFETY: `inner` is pinned when `sema` is.
139-
mutex_init!(Pin::new_unchecked(&sema.inner), "Semaphore::inner");
140+
let pinned = unsafe { Pin::new_unchecked(&sema.inner) };
141+
mutex_init!(pinned, "Semaphore::inner");
140142
},
141143
)?;
142144

0 commit comments

Comments
 (0)