From 8ce2dc424eab98b907b3117b7515190c62f63c7f Mon Sep 17 00:00:00 2001 From: xukl <30969283+xukl@users.noreply.github.com> Date: Tue, 2 May 2023 07:56:20 +0800 Subject: pk: fix __do_brk when new addr is not feasible (#295) Linux kernel simply return current brk when request brk addr is not feasible. The pk should probably do the same. --- pk/elf.c | 1 + pk/mmap.c | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/pk/elf.c b/pk/elf.c index bfc8daa..abc78e1 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 dd0fe59..8f9a281 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) { -- cgit v1.1