1
Fork 0
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:
Andreas Kling 2019-10-01 11:38:59 +02:00
parent 4bfd4dc6c7
commit c58d1868cb
2 changed files with 7 additions and 2 deletions

View file

@ -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) {