From 0e64fb1fabd3e5f7dca60693c1996b291c0178b6 Mon Sep 17 00:00:00 2001 From: Jack May Date: Fri, 18 Mar 2022 11:30:52 -0700 Subject: [PATCH] don't rely on align_offset to check alignment (#23770) --- programs/bpf_loader/src/syscalls.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index 37c40a3249..d8e2265b48 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -541,7 +541,7 @@ fn translate_type_inner<'a, T>( let host_addr = translate(memory_mapping, access_type, vm_addr, size_of::() as u64)?; if loader_id != &bpf_loader_deprecated::id() - && (host_addr as *mut T).align_offset(align_of::()) != 0 + && (host_addr as *mut T as usize).wrapping_rem(align_of::()) != 0 { return Err(SyscallError::UnalignedPointer.into()); } @@ -582,7 +582,7 @@ fn translate_slice_inner<'a, T>( )?; if loader_id != &bpf_loader_deprecated::id() - && (host_addr as *mut T).align_offset(align_of::()) != 0 + && (host_addr as *mut T as usize).wrapping_rem(align_of::()) != 0 { return Err(SyscallError::UnalignedPointer.into()); } @@ -4034,7 +4034,10 @@ mod tests { ); let address = result.unwrap(); assert_ne!(address, 0); - assert_eq!((address as *const u8).align_offset(align_of::()), 0); + assert_eq!( + (address as *const u8 as usize).wrapping_rem(align_of::()), + 0 + ); } check_alignment::(); check_alignment::();