rust/kernel/net/netlink.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
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
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
© 2016 - 2026 Red Hat, Inc.