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 <redacted>
---
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