diff --git a/pk/elf.c b/pk/elf.c index bfc8daa6..abc78e15 100644 --- a/pk/elf.c +++ b/pk/elf.c @@ -96,6 +96,7 @@ void load_elf(const char* fn, elf_info* info) } file_decref(file); + info->brk = ROUNDUP(info->brk_min, RISCV_PGSIZE); return; fail: diff --git a/pk/mmap.c b/pk/mmap.c index dd0fe59d..8f9a2819 100644 --- a/pk/mmap.c +++ b/pk/mmap.c @@ -433,13 +433,8 @@ uintptr_t do_mmap(uintptr_t addr, size_t length, int prot, int flags, int fd, of uintptr_t __do_brk(size_t addr) { uintptr_t newbrk = addr; - if (addr < current.brk_min) - newbrk = current.brk_min; - else if (addr > current.brk_max) - newbrk = current.brk_max; - - if (current.brk == 0) - current.brk = ROUNDUP(current.brk_min, RISCV_PGSIZE); + if (addr < current.brk_min || addr > current.brk_max) + return current.brk; uintptr_t newbrk_page = ROUNDUP(newbrk, RISCV_PGSIZE); if (current.brk > newbrk_page) {