Re-fix arithmetic overflow and add better test (#13870)
This commit is contained in:
parent
75e3f5cd48
commit
2d62f2ad03
|
@ -313,7 +313,7 @@ fn translate_slice_mut<'a, T>(
|
|||
memory_mapping,
|
||||
access_type,
|
||||
vm_addr,
|
||||
len * size_of::<T>() as u64,
|
||||
len.saturating_mul(size_of::<T>() as u64),
|
||||
loader_id,
|
||||
) {
|
||||
Ok(value) => Ok(unsafe { from_raw_parts_mut(value as *mut T, len as usize) }),
|
||||
|
@ -1614,6 +1614,36 @@ mod tests {
|
|||
)
|
||||
.is_err());
|
||||
|
||||
// u64
|
||||
let mut data = vec![1u64, 2, 3, 4, 5];
|
||||
let addr = data.as_ptr() as *const _ as u64;
|
||||
let memory_mapping = MemoryMapping::new_from_regions(vec![MemoryRegion {
|
||||
host_addr: addr,
|
||||
vm_addr: 96,
|
||||
len: (data.len() * size_of::<u64>()) as u64,
|
||||
vm_gap_shift: 63,
|
||||
is_writable: false,
|
||||
}]);
|
||||
let translated_data = translate_slice::<u64>(
|
||||
&memory_mapping,
|
||||
AccessType::Load,
|
||||
96,
|
||||
data.len() as u64,
|
||||
&bpf_loader::id(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(data, translated_data);
|
||||
data[0] = 10;
|
||||
assert_eq!(data, translated_data);
|
||||
assert!(translate_slice::<u64>(
|
||||
&memory_mapping,
|
||||
AccessType::Load,
|
||||
96,
|
||||
u64::MAX,
|
||||
&bpf_loader::id(),
|
||||
)
|
||||
.is_err());
|
||||
|
||||
// Pubkeys
|
||||
let mut data = vec![solana_sdk::pubkey::new_rand(); 5];
|
||||
let addr = data.as_ptr() as *const _ as u64;
|
||||
|
|
Loading…
Reference in New Issue