All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alice Ryhl <aliceryhl@google.com>
To: Alexandru Radovici <alexandru.radovici@wyliodrin.com>
Cc: "Arnd Bergmann" <arnd@arndb.de>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Tamir Duberstein" <tamird@kernel.org>,
	"Alexandre Courbot" <acourbot@nvidia.com>,
	"Onur Özkan" <work@onurozkan.dev>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rust: misc: add OWNER field to the `MiscDevice` trait
Date: Thu, 6 Aug 2026 08:28:23 +0000	[thread overview]
Message-ID: <anRFp0rqUomBOSkO@google.com> (raw)
In-Reply-To: <20260805-rust_tmp-v1-1-7851cc1c00e8@wyliodrin.com>

On Wed, Aug 05, 2026 at 03:20:07PM +0300, Alexandru Radovici wrote:
> Add `OWNER` constant to the `MiscDevice` trait to allow modules
> to prevent unloading while the device is in use.
> 
> Set the `OWNER` field in the `rust_misc_device` example.
> 
> Signed-off-by: Alexandru Radovici <alexandru.radovici@wyliodrin.com>

This is already being solved by:
https://lore.kernel.org/all/20260723-fix-fops-owner-v9-0-c1c3af7f7bcb@linux.dev/

> This patch exposes the `owner` field of `file_operations` to the
> Rust API `MiscDevice` trait. It allows users to prevent the
> unloading of their loadable modules written in Rust
> while their `MiscDevice` is still in use.
> 
> Without this ability, writing a misc loadable module and running
> the following commands will Oops the kernel.
> 
>    # insmod misc_module.ko
>    # sleep 10 > /dev/misc_device
>    # rmmod misc_module
> 
>    ... after the sleep, the kernel Oops
> 
> I added the `OWNER` field to the `rust_misc_device` example.
> ---
>  rust/kernel/miscdevice.rs        | 13 ++++++++++++-
>  samples/rust/rust_misc_device.rs |  4 ++++
>  2 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/rust/kernel/miscdevice.rs b/rust/kernel/miscdevice.rs
> index 83ce50def5ac..21c5d88c5dc4 100644
> --- a/rust/kernel/miscdevice.rs
> +++ b/rust/kernel/miscdevice.rs
> @@ -31,7 +31,7 @@
>          Opaque, //
>      },
>  };
> -use core::marker::PhantomData;
> +use core::{marker::PhantomData, ptr};
>  
>  /// Options for creating a misc device.
>  #[derive(Copy, Clone)]
> @@ -126,6 +126,12 @@ pub trait MiscDevice: Sized {
>      /// What kind of pointer should `Self` be wrapped in.
>      type Ptr: ForeignOwnable + Send + Sync;
>  
> +    /// Set the owner of this `MiscDevice` instance.
> +    ///
> +    /// In case this is compiled as a module, setting this prevents
> +    /// the module unloading while the device is still in use.
> +    const OWNER: Option<&'static ThisModule> = None;
> +
>      /// Called when the misc device is opened.
>      ///
>      /// The returned pointer will be stored as the private data for the file.
> @@ -430,6 +436,11 @@ impl<T: MiscDevice> MiscdeviceVTable<T> {
>          } else {
>              None
>          },
> +        #[cfg(CONFIG_MODULES)]
> +        owner: match T::OWNER {
> +            Some(module) => module.as_ptr(),
> +            None => ptr::null_mut(),
> +        },
>          ..pin_init::zeroed()
>      };
>  
> diff --git a/samples/rust/rust_misc_device.rs b/samples/rust/rust_misc_device.rs
> index 41e26c825060..bf8801ea3cb2 100644
> --- a/samples/rust/rust_misc_device.rs
> +++ b/samples/rust/rust_misc_device.rs
> @@ -177,6 +177,10 @@ struct RustMiscDevice {
>  impl MiscDevice for RustMiscDevice {
>      type Ptr = Pin<KBox<Self>>;
>  
> +    // Set the OWNER constant to the current module to prevent the unloading
> +    // of this module while this device is in use.
> +    const OWNER: Option<&'static ThisModule> = Some(&crate::THIS_MODULE);
> +
>      fn open(_file: &File, misc: &MiscDeviceRegistration<Self>) -> Result<Pin<KBox<Self>>> {
>          let dev = ARef::from(misc.device());
>  
> 
> ---
> base-commit: c21bb4193868a8de71fc4693fa741e195fdf5d86
> change-id: 20260805-rust_tmp-095994661956
> 
> Best regards,
> -- 
> Alexandru Radovici <alexandru.radovici@wyliodrin.com>
> 

      reply	other threads:[~2026-08-06  8:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-05 12:20 [PATCH] rust: misc: add OWNER field to the `MiscDevice` trait Alexandru Radovici
2026-08-06  8:28 ` Alice Ryhl [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=anRFp0rqUomBOSkO@google.com \
    --to=aliceryhl@google.com \
    --cc=a.hindborg@kernel.org \
    --cc=acourbot@nvidia.com \
    --cc=alexandru.radovici@wyliodrin.com \
    --cc=arnd@arndb.de \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun@kernel.org \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tamird@kernel.org \
    --cc=tmgross@umich.edu \
    --cc=work@onurozkan.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.