From ff82c244f77f46da9245b42ede56c0500cd6b56f Mon Sep 17 00:00:00 2001
From: Tamir Duberstein <tamird@gmail.com>
Date: Sun, 2 Mar 2025 08:16:35 -0500
Subject: [PATCH] netlink: avoiding casting pointers to usize

---
 aya/src/sys/netlink.rs | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/aya/src/sys/netlink.rs b/aya/src/sys/netlink.rs
index 6b8b5e7b..f67f6b92 100644
--- a/aya/src/sys/netlink.rs
+++ b/aya/src/sys/netlink.rs
@@ -707,9 +707,13 @@ impl From<NlAttrError> for io::Error {
 }
 
 unsafe fn request_attributes<T>(req: &mut T, msg_len: usize) -> &mut [u8] {
-    let attrs_addr = align_to(req as *mut _ as usize + msg_len, NLMSG_ALIGNTO as usize);
-    let attrs_end = req as *mut _ as usize + mem::size_of::<T>();
-    slice::from_raw_parts_mut(attrs_addr as *mut u8, attrs_end - attrs_addr)
+    let req: *mut _ = req;
+    let req: *mut u8 = req.cast();
+    let attrs_addr = req.add(msg_len);
+    let align_offset = attrs_addr.align_offset(NLMSG_ALIGNTO as usize);
+    let attrs_addr = attrs_addr.add(align_offset);
+    let len = mem::size_of::<T>() - msg_len - align_offset;
+    slice::from_raw_parts_mut(attrs_addr, len)
 }
 
 fn bytes_of<T>(val: &T) -> &[u8] {