rust: enable clippy::ptr_as_ptr lint
In Rust 1.51.0, Clippy introduced the `ptr_as_ptr` lint [1]: > Though `as` casts between raw pointers are not terrible, > `pointer::cast` is safer because it cannot accidentally change the > pointer's mutability, nor cast the pointer to other types like `usize`. There are a few classes of changes required: - Modules generated by bindgen are marked `#[allow(clippy::ptr_as_ptr)]`. - Inferred casts (` as _`) are replaced with `.cast()`. - Ascribed casts (` as *... T`) are replaced with `.cast::<T>()`. - Multistep casts from references (` as *const _ as *const T`) are replaced with `core::ptr::from_ref(&x).cast()` with or without `::<T>` according to the previous rules. The `core::ptr::from_ref` call is required because `(x as *const _).cast::<T>()` results in inference failure. - Native literal C strings are replaced with `c_str!().as_char_ptr()`. - `*mut *mut T as _` is replaced with `let *mut *const T = (*mut *mut T)`.cast();` since pointer to pointer can be confusing. Apply these changes and enable the lint -- no functional change intended. Link: https://rust-lang.github.io/rust-clippy/master/index.html#ptr_as_ptr [1] Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Tamir Duberstein <tamird@gmail.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Tejun Heo <tj@kernel.org> Acked-by: Danilo Krummrich <dakr@kernel.org> Link: https://lore.kernel.org/r/20250615-ptr-as-ptr-v12-1-f43b024581e8@gmail.com [ Added `.cast()` for `opp`. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
committed by
Miguel Ojeda
parent
86731a2a65
commit
fcad9bbf9e
@@ -170,7 +170,7 @@ impl Queue {
|
||||
pub unsafe fn from_raw<'a>(ptr: *const bindings::workqueue_struct) -> &'a Queue {
|
||||
// SAFETY: The `Queue` type is `#[repr(transparent)]`, so the pointer cast is valid. The
|
||||
// caller promises that the pointer is not dangling.
|
||||
unsafe { &*(ptr as *const Queue) }
|
||||
unsafe { &*ptr.cast::<Queue>() }
|
||||
}
|
||||
|
||||
/// Enqueues a work item.
|
||||
@@ -522,7 +522,7 @@ where
|
||||
{
|
||||
unsafe extern "C" fn run(ptr: *mut bindings::work_struct) {
|
||||
// The `__enqueue` method always uses a `work_struct` stored in a `Work<T, ID>`.
|
||||
let ptr = ptr as *mut Work<T, ID>;
|
||||
let ptr = ptr.cast::<Work<T, ID>>();
|
||||
// SAFETY: This computes the pointer that `__enqueue` got from `Arc::into_raw`.
|
||||
let ptr = unsafe { T::work_container_of(ptr) };
|
||||
// SAFETY: This pointer comes from `Arc::into_raw` and we've been given back ownership.
|
||||
@@ -575,7 +575,7 @@ where
|
||||
{
|
||||
unsafe extern "C" fn run(ptr: *mut bindings::work_struct) {
|
||||
// The `__enqueue` method always uses a `work_struct` stored in a `Work<T, ID>`.
|
||||
let ptr = ptr as *mut Work<T, ID>;
|
||||
let ptr = ptr.cast::<Work<T, ID>>();
|
||||
// SAFETY: This computes the pointer that `__enqueue` got from `Arc::into_raw`.
|
||||
let ptr = unsafe { T::work_container_of(ptr) };
|
||||
// SAFETY: This pointer comes from `Arc::into_raw` and we've been given back ownership.
|
||||
|
||||
Reference in New Issue
Block a user