|
@@ -340,7 +340,11 @@ static KResultOr<LoadResult> load_elf_object(NonnullOwnPtr<Space> new_space, Fil
|
|
|
if (program_header.is_writable())
|
|
|
prot |= PROT_WRITE;
|
|
|
auto region_name = String::formatted("{} (data-{}{})", elf_name, program_header.is_readable() ? "r" : "", program_header.is_writable() ? "w" : "");
|
|
|
- auto range = new_space->allocate_range(program_header.vaddr().offset(load_offset), program_header.size_in_memory());
|
|
|
+
|
|
|
+ auto range_base = VirtualAddress { page_round_down(program_header.vaddr().offset(load_offset).get()) };
|
|
|
+ auto range_end = VirtualAddress { page_round_up(program_header.vaddr().offset(load_offset).offset(program_header.size_in_memory()).get()) };
|
|
|
+
|
|
|
+ auto range = new_space->allocate_range(range_base, range_end.get() - range_base.get());
|
|
|
if (!range.has_value()) {
|
|
|
ph_load_result = ENOMEM;
|
|
|
return IterationDecision::Break;
|