diff --git a/src/context/memory.rs b/src/context/memory.rs index 0931e5c5161bb9c7d0a584369c8e4aa8fdcf9231..c4a17592d7d6b4c3a5b0e4a8db039e90d19b2f69 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -406,14 +406,14 @@ impl Grant { let mut flush_all = MapperFlushAll::new(); - let start_page = Page::containing_address(self.region.start); - let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1)); + let start_page = Page::containing_address(self.start_address()); + let end_page = Page::containing_address(self.final_address()); for page in Page::range_inclusive(start_page, end_page) { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); let frame = active_table.translate_page(page).expect("grant references unmapped memory"); - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); if self.owned { let result = active_table.map(new_page, EntryFlags::PRESENT | EntryFlags::WRITABLE | EntryFlags::NO_EXECUTE); flush_all.consume(result); @@ -427,7 +427,7 @@ impl Grant { if self.owned { unsafe { - intrinsics::copy(self.region.start.get() as *const u8, new_start.get() as *mut u8, self.region.size); + intrinsics::copy(self.start_address().get() as *const u8, new_start.get() as *mut u8, self.size()); } let mut flush_all = MapperFlushAll::new(); @@ -436,7 +436,7 @@ impl Grant { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); let result = active_table.remap(new_page, flags); flush_all.consume(result); } @@ -447,7 +447,7 @@ impl Grant { Grant { region: Region { start: new_start, - size: self.region.size, + size: self.size(), }, flags: self.flags, mapped: true, @@ -463,8 +463,8 @@ impl Grant { let mut flush_all = MapperFlushAll::new(); - let start_page = Page::containing_address(self.region.start); - let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1)); + let start_page = Page::containing_address(self.start_address()); + let end_page = Page::containing_address(self.final_address()); for page in Page::range_inclusive(start_page, end_page) { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); @@ -472,7 +472,7 @@ impl Grant { flush_all.consume(result); active_table.with(new_table, temporary_page, |mapper| { - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); let result = mapper.map_to(new_page, frame, flags); // Ignore result due to mapping on inactive table unsafe { result.ignore(); } @@ -481,7 +481,9 @@ impl Grant { flush_all.flush(&mut active_table); - self.region.start = new_start; + unsafe { + self.region_mut().set_start_address(new_start); + } } pub fn flags(&self) -> EntryFlags {