rust: miscdevice: add missing safety comments
authorAlice Ryhl <aliceryhl@google.com>
Tue, 22 Oct 2024 13:14:13 +0000 (13:14 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Oct 2024 13:53:15 +0000 (15:53 +0200)
This fixes the following four warnings:

warning: unsafe block missing a safety comment
   --> /home/aliceryhl/rust-for-linux/rust/kernel/miscdevice.rs:168:15
    |
168 |             ..unsafe { MaybeUninit::zeroed().assume_init() }
    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: consider adding a safety comment on the preceding line
    = help: for further information visit
      https://rust-lang.github.io/rust-clippy/master/index.html#undocumented_unsafe_blocks
    = note: requested on the command line with `-W clippy::undocumented-unsafe-blocks`

warning: unsafe function's docs are missing a `# Safety` section
   --> /home/aliceryhl/rust-for-linux/rust/kernel/miscdevice.rs:175:1
    |
175 | / unsafe extern "C" fn fops_open<T: MiscDevice>(
176 | |     inode: *mut bindings::inode,
177 | |     file: *mut bindings::file,
178 | | ) -> c_int {
    | |__________^
    |
    = help: for further information visit
      https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc
    = note: `-W clippy::missing-safety-doc` implied by `-W clippy::all`
    = help: to override `-W clippy::all` add `#[allow(clippy::missing_safety_doc)]`

warning: unsafe function's docs are missing a `# Safety` section
   --> /home/aliceryhl/rust-for-linux/rust/kernel/miscdevice.rs:196:1
    |
196 | / unsafe extern "C" fn fops_release<T: MiscDevice>(
197 | |     _inode: *mut bindings::inode,
198 | |     file: *mut bindings::file,
199 | | ) -> c_int {
    | |__________^
    |
    = help: for further information visit
      https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc

warning: unsafe function's docs are missing a `# Safety` section
   --> /home/aliceryhl/rust-for-linux/rust/kernel/miscdevice.rs:210:1
    |
210 | / unsafe extern "C" fn fops_ioctl<T: MiscDevice>(
211 | |     file: *mut bindings::file,
212 | |     cmd: c_uint,
213 | |     arg: c_ulong,
214 | | ) -> c_long {
    | |___________^
    |
    = help: for further information visit
      https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc

Note that these warnings are currently not enabled in the build, but
rust-next contains a commit that will enable them, so we should fix
them.

Reported-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Closes: https://lore.kernel.org/rust-for-linux/CANiq72kOs6vPDUzZttQNqePFHphCQ30iVmZ5MO7eCJfPG==Vzg@mail.gmail.com/
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Link: https://lore.kernel.org/r/20241022-miscdevice-unsafe-warn-fix-v1-1-a78fde1740d6@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
rust/kernel/miscdevice.rs

index 50885fb..7e2a79b 100644 (file)
@@ -165,6 +165,7 @@ const fn create_vtable<T: MiscDevice>() -> &'static bindings::file_operations {
             } else {
                 None
             },
+            // SAFETY: All zeros is a valid value for `bindings::file_operations`.
             ..unsafe { MaybeUninit::zeroed().assume_init() }
         };
     }
@@ -172,6 +173,10 @@ const fn create_vtable<T: MiscDevice>() -> &'static bindings::file_operations {
     &VtableHelper::<T>::VTABLE
 }
 
+/// # Safety
+///
+/// `file` and `inode` must be the file and inode for a file that is undergoing initialization.
+/// The file must be associated with a `MiscDeviceRegistration<T>`.
 unsafe extern "C" fn fops_open<T: MiscDevice>(
     inode: *mut bindings::inode,
     file: *mut bindings::file,
@@ -193,6 +198,10 @@ unsafe extern "C" fn fops_open<T: MiscDevice>(
     0
 }
 
+/// # Safety
+///
+/// `file` and `inode` must be the file and inode for a file that is being released. The file must
+/// be associated with a `MiscDeviceRegistration<T>`.
 unsafe extern "C" fn fops_release<T: MiscDevice>(
     _inode: *mut bindings::inode,
     file: *mut bindings::file,
@@ -207,6 +216,9 @@ unsafe extern "C" fn fops_release<T: MiscDevice>(
     0
 }
 
+/// # Safety
+///
+/// `file` must be a valid file that is associated with a `MiscDeviceRegistration<T>`.
 unsafe extern "C" fn fops_ioctl<T: MiscDevice>(
     file: *mut bindings::file,
     cmd: c_uint,
@@ -223,6 +235,9 @@ unsafe extern "C" fn fops_ioctl<T: MiscDevice>(
     }
 }
 
+/// # Safety
+///
+/// `file` must be a valid file that is associated with a `MiscDeviceRegistration<T>`.
 #[cfg(CONFIG_COMPAT)]
 unsafe extern "C" fn fops_compat_ioctl<T: MiscDevice>(
     file: *mut bindings::file,