[PATCH v2] rust: net: netlink: Migrate to zerocopy's IntoBytes

Sagar Taunk posted 1 patch 1 week, 5 days ago
There is a newer version of this series
rust/kernel/net/netlink.rs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
[PATCH v2] rust: net: netlink: Migrate to zerocopy's IntoBytes
Posted by Sagar Taunk 1 week, 5 days ago
Replace the kernel's own `transmute::FromBytes` and `AsBytes` traits
with their zerocopy equivalents. Specifically, this updates
`GenlMsg::put` to rely on `IntoBytes` for converting attributes into
byte slices.

Also, add `Immutable` trait bound on `GenlMsg::put` as zerocopy
splits the `no interior mutability` guarantee that `AsBytes` bundled
together.

Link: https://github.com/Rust-for-Linux/linux/issues/1241
Signed-off-by: Sagar Taunk <sagartaunk@proton.me>
---
v2: Split into a separate patch per Shashiko's review; validates the
    attribute length with c_int::try_from() instead of casting with `as`.

 rust/kernel/net/netlink.rs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/rust/kernel/net/netlink.rs b/rust/kernel/net/netlink.rs
index 22ef3dde36fa..3c2b142a7402 100644
--- a/rust/kernel/net/netlink.rs
+++ b/rust/kernel/net/netlink.rs
@@ -12,11 +12,12 @@
     alloc::{self, AllocError},
     error::to_result,
     prelude::*,
-    transmute::AsBytes,
     types::Opaque,
     ThisModule,
 };
 
+use zerocopy::{Immutable, IntoBytes};
+
 use core::{
     mem::ManuallyDrop,
     ptr::NonNull, //
@@ -84,7 +85,7 @@ impl GenlMsg {
     #[inline]
     fn put<T>(&mut self, attrtype: c_int, value: &T) -> Result
     where
-        T: ?Sized + AsBytes,
+        T: ?Sized + IntoBytes + Immutable,
     {
         let skb = self.skb.skb.as_ptr();
         let len = size_of_val(value);
-- 
2.55.0
Re: [PATCH v2] rust: net: netlink: Migrate to zerocopy's IntoBytes
Posted by Alexandre Courbot 1 week, 4 days ago
On Sun Sep 13, 2026 at 11:18 AM JST, Sagar Taunk wrote:
> Replace the kernel's own `transmute::FromBytes` and `AsBytes` traits
> with their zerocopy equivalents. Specifically, this updates
> `GenlMsg::put` to rely on `IntoBytes` for converting attributes into
> byte slices.
>
> Also, add `Immutable` trait bound on `GenlMsg::put` as zerocopy
> splits the `no interior mutability` guarantee that `AsBytes` bundled
> together.
>
> Link: https://github.com/Rust-for-Linux/linux/issues/1241
> Signed-off-by: Sagar Taunk <sagartaunk@proton.me>
> ---
> v2: Split into a separate patch per Shashiko's review; validates the
>     attribute length with c_int::try_from() instead of casting with `as`.
>
>  rust/kernel/net/netlink.rs | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/rust/kernel/net/netlink.rs b/rust/kernel/net/netlink.rs
> index 22ef3dde36fa..3c2b142a7402 100644
> --- a/rust/kernel/net/netlink.rs
> +++ b/rust/kernel/net/netlink.rs
> @@ -12,11 +12,12 @@
>      alloc::{self, AllocError},
>      error::to_result,
>      prelude::*,
> -    transmute::AsBytes,
>      types::Opaque,
>      ThisModule,
>  };
>  
> +use zerocopy::{Immutable, IntoBytes};

Please use the vertical import style as per the guidelines [1].

With that,

Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>

[1] https://docs.kernel.org/rust/coding-guidelines.html#imports