Browse Source
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.
pull/296/head
xukl
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
3 additions and
7 deletions
-
pk/elf.c
-
pk/mmap.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: |
|
|
|
|
|
|
|
@ -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) { |
|
|
|
|