diff --git a/common/src/level_4_entries.rs b/common/src/level_4_entries.rs index a7f88e80..217cf087 100644 --- a/common/src/level_4_entries.rs +++ b/common/src/level_4_entries.rs @@ -137,7 +137,7 @@ impl UsedLevel4Entries { /// Marks all p4 entries in the range `[address..address+size)` as used. fn mark_range_as_used(&mut self, address: u64, size: u64) { let start = VirtAddr::new(address); - let end_inclusive = (start + size) - 1; + let end_inclusive = start + (size - 1); let start_page = Page::::containing_address(start); let end_page_inclusive = Page::::containing_address(end_inclusive); diff --git a/common/src/load_kernel.rs b/common/src/load_kernel.rs index 41b183a6..082aba56 100644 --- a/common/src/load_kernel.rs +++ b/common/src/load_kernel.rs @@ -504,12 +504,15 @@ where fn remove_copied_flags(&mut self, elf_file: &ElfFile) -> Result<(), &'static str> { for program_header in elf_file.program_iter() { if let Type::Load = program_header.get_type()? { + if program_header.mem_size() == 0 { + continue; + } let start = self.virtual_address_offset + program_header.virtual_addr(); - let end = start + program_header.mem_size(); + let end = start + (program_header.mem_size() - 1); let start = VirtAddr::new(start); let end = VirtAddr::new(end); let start_page = Page::containing_address(start); - let end_page = Page::containing_address(end - 1u64); + let end_page = Page::containing_address(end); for page in Page::::range_inclusive(start_page, end_page) { // Translate the page and get the flags. let res = self.page_table.translate(page.start_address());