diff --git a/kernel/src/sys/elf/ELFLoader.cpp b/kernel/src/sys/elf/ELFLoader.cpp index 68d31f15..4c9f08c7 100644 --- a/kernel/src/sys/elf/ELFLoader.cpp +++ b/kernel/src/sys/elf/ELFLoader.cpp @@ -103,7 +103,7 @@ ELFImage* ELFLoader::load_elf_from_address(uintptr_t addr) kerrorln("Address is NULL, this is invalid :("); return 0; } - uint64_t pages = Utilities::get_blocks_from_size(PAGE_SIZE, phdr->p_memsz); + uint64_t pages = Utilities::get_blocks_from_size(PAGE_SIZE, (phdr->p_vaddr % PAGE_SIZE) + phdr->p_memsz); void* buffer = MemoryManager::get_pages_at(phdr->p_vaddr, pages, phdr->p_flags & 2 ? MAP_READ_WRITE | MAP_USER : MAP_USER); memcpy(buffer, (void*)(addr + phdr->p_offset), phdr->p_filesz);