Commit 953deba7 authored by Atharv Dubey's avatar Atharv Dubey Committed by Greg Kroah-Hartman
Browse files

rust: miscdevice: use `pin_init::zeroed()` for C type initialization

Replace manual zero-initialization using
`MaybeUninit::zeroed().assume_init()` with `pin_init::zeroed()`.
The `pin_init` helper provides a safer and clearer API for
zero-initializing C structs without requiring an `unsafe` block.

Link: https://github.com/Rust-for-Linux/linux/issues/1189


Signed-off-by: default avatarAtharv Dubey <atharvd440@gmail.com>
Reviewed-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Link: https://patch.msgid.link/20251129121513.20738-1-atharvd440@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e849ada7
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
    seq_file::SeqFile,
    types::{ForeignOwnable, Opaque},
};
use core::{marker::PhantomData, mem::MaybeUninit, pin::Pin};
use core::{marker::PhantomData, pin::Pin};

/// Options for creating a misc device.
#[derive(Copy, Clone)]
@@ -32,8 +32,7 @@ pub struct MiscDeviceOptions {
impl MiscDeviceOptions {
    /// Create a raw `struct miscdev` ready for registration.
    pub const fn into_raw<T: MiscDevice>(self) -> bindings::miscdevice {
        // SAFETY: All zeros is valid for this C type.
        let mut result: bindings::miscdevice = unsafe { MaybeUninit::zeroed().assume_init() };
        let mut result: bindings::miscdevice = pin_init::zeroed();
        result.minor = bindings::MISC_DYNAMIC_MINOR as ffi::c_int;
        result.name = crate::str::as_char_ptr_in_const_context(self.name);
        result.fops = MiscdeviceVTable::<T>::build();
@@ -420,8 +419,7 @@ impl<T: MiscDevice> MiscdeviceVTable<T> {
        } else {
            None
        },
        // SAFETY: All zeros is a valid value for `bindings::file_operations`.
        ..unsafe { MaybeUninit::zeroed().assume_init() }
        ..pin_init::zeroed()
    };

    const fn build() -> &'static bindings::file_operations {