mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 16:15:10 +00:00
Kernel: Fix munmap() bad splitting of already-split Regions
When splitting an Region that's already the result of an earlier split, we have to take the Region's offset-in-VMObject into account since it may be non-zero.
This commit is contained in:
parent
4bfd4dc6c7
commit
c58d1868cb
2 changed files with 7 additions and 2 deletions
|
@ -246,8 +246,8 @@ int Process::sys$munmap(void* addr, size_t size)
|
|||
auto make_replacement_region = [&](const Range& new_range) -> Region& {
|
||||
ASSERT(new_range.base() >= old_region_range.base());
|
||||
ASSERT(new_range.end() <= old_region_range.end());
|
||||
size_t new_range_offset_in_old_region = new_range.base().get() - old_region_range.base().get();
|
||||
return allocate_split_region(*old_region, new_range, new_range_offset_in_old_region);
|
||||
size_t new_range_offset_in_vmobject = old_region->offset_in_vmobject() + (new_range.base().get() - old_region_range.base().get());
|
||||
return allocate_split_region(*old_region, new_range, new_range_offset_in_vmobject);
|
||||
};
|
||||
Vector<Region*, 2> new_regions;
|
||||
for (auto& new_range : remaining_ranges_after_unmap) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue