Browse Source

mprotect whole ELF segment, not just file portion

pull/328/head
Andrew Waterman 2 years ago
parent
commit
86ed1b3b06
  1. 6
      pk/elf.c

6
pk/elf.c

@ -89,13 +89,13 @@ void load_elf(const char* fn, elf_info* info)
goto fail;
}
memset_user((void*)vaddr - prepad, 0, prepad);
if (!(prot & PROT_WRITE))
if (do_mprotect(vaddr - prepad, ph[i].p_filesz + prepad, prot))
goto fail;
size_t mapped = ROUNDUP(ph[i].p_filesz + prepad, RISCV_PGSIZE) - prepad;
if (ph[i].p_memsz > mapped)
if (__do_mmap(vaddr + mapped, ph[i].p_memsz - mapped, prot, flags|MAP_ANONYMOUS, 0, 0) != vaddr + mapped)
goto fail;
if (!(prot & PROT_WRITE))
if (do_mprotect(vaddr - prepad, ph[i].p_memsz + prepad, prot))
goto fail;
}
}

Loading…
Cancel
Save