diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 63fb04c5e6..2d6cc61e8e 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -340,7 +340,11 @@ static KResultOr load_elf_object(NonnullOwnPtr 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;