don't rely on align_offset to check alignment (#23770)

This commit is contained in:
Jack May 2022-03-18 11:30:52 -07:00 committed by GitHub
parent fcea92ec6c
commit 0e64fb1fab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 3 deletions

View File

@ -541,7 +541,7 @@ fn translate_type_inner<'a, T>(
let host_addr = translate(memory_mapping, access_type, vm_addr, size_of::<T>() as u64)?;
if loader_id != &bpf_loader_deprecated::id()
&& (host_addr as *mut T).align_offset(align_of::<T>()) != 0
&& (host_addr as *mut T as usize).wrapping_rem(align_of::<T>()) != 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::<T>()) != 0
&& (host_addr as *mut T as usize).wrapping_rem(align_of::<T>()) != 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::<u8>()), 0);
assert_eq!(
(address as *const u8 as usize).wrapping_rem(align_of::<u8>()),
0
);
}
check_alignment::<u8>();
check_alignment::<u16>();