4
0
Эх сурвалжийг харах

netlink: avoiding casting pointers to usize

Tamir Duberstein 1 сар өмнө
parent
commit
ff82c244f7

+ 7 - 3
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] {