diff --git a/litebox/src/platform/page_mgmt.rs b/litebox/src/platform/page_mgmt.rs index c4fca057a..a321ce7aa 100644 --- a/litebox/src/platform/page_mgmt.rs +++ b/litebox/src/platform/page_mgmt.rs @@ -135,12 +135,13 @@ pub trait PageManagementProvider: RawPointerProvider { let total_len = old_range.len(); let mut offset = 0; while offset < total_len { + let chunk_len = (total_len - offset).min(ALIGN); let old_ptr = ::RawConstPointer::from_usize(old_range.start + offset); new_ptr .write_slice_at_offset( isize::try_from(offset).unwrap(), - &old_ptr.to_owned_slice(old_range.len()).unwrap(), + &old_ptr.to_owned_slice(chunk_len).unwrap(), ) .unwrap(); offset += ALIGN; @@ -148,7 +149,7 @@ pub trait PageManagementProvider: RawPointerProvider { if temp_permissions != permissions { (unsafe { self.update_permissions(new_range.clone(), permissions) }) - .expect("failed to restore perrmissions on new range"); + .expect("failed to restore permissions on new range"); } (unsafe { self.deallocate_pages(old_range) }).expect("failed to deallocate old range"); diff --git a/litebox_common_linux/src/mm.rs b/litebox_common_linux/src/mm.rs index 04fc48c28..a7949faf7 100644 --- a/litebox_common_linux/src/mm.rs +++ b/litebox_common_linux/src/mm.rs @@ -20,12 +20,6 @@ fn align_up(addr: usize, align: usize) -> usize { (addr + align - 1) & !(align - 1) } -#[inline] -fn align_down(addr: usize, align: usize) -> usize { - debug_assert!(align.is_power_of_two()); - addr & !(align - 1) -} - pub fn do_mmap< Platform: litebox::platform::RawPointerProvider + litebox::sync::RawSyncPrimitivesProvider @@ -184,8 +178,8 @@ pub fn sys_mremap< return Err(Errno::EINVAL); } - let old_size = align_down(old_size, PAGE_SIZE); - let new_size = align_down(new_size, PAGE_SIZE); + let old_size = align_up(old_size, PAGE_SIZE); + let new_size = align_up(new_size, PAGE_SIZE); if new_size == 0 { return Err(Errno::EINVAL); } diff --git a/litebox_platform_linux_kernel/src/lib.rs b/litebox_platform_linux_kernel/src/lib.rs index cc207d3da..4c796e19c 100644 --- a/litebox_platform_linux_kernel/src/lib.rs +++ b/litebox_platform_linux_kernel/src/lib.rs @@ -459,7 +459,7 @@ impl PageManagementProvider for .ok_or(litebox::platform::page_mgmt::RemapError::Unaligned)?; let new_range = PageRange::new(new_range.start, new_range.end) .ok_or(litebox::platform::page_mgmt::RemapError::Unaligned)?; - if old_range.start.max(new_range.start) <= old_range.end.min(new_range.end) { + if old_range.start.max(new_range.start) < old_range.end.min(new_range.end) { return Err(litebox::platform::page_mgmt::RemapError::Overlapping); } unsafe { self.page_table.remap_pages(old_range, new_range) }