diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel/syscalls.c | 1 | ||||
-rw-r--r-- | src/user/lib/elfload.c | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c index 259b59f..0810720 100644 --- a/src/kernel/syscalls.c +++ b/src/kernel/syscalls.c @@ -319,6 +319,7 @@ void __user *_sys_memflag(void __user *addr, size_t len, int flags) { addr = (userptr_t)((uintptr_t __force)addr & ~PAGE_MASK); // align to page boundary if (flags & MEMFLAG_FINDFREE) { + // TODO space out page allocations to catch stupid bugs addr = pagedir_findfree(pages, addr, len); if (!(flags & MEMFLAG_PRESENT)) SYSCALL_RETURN((uintptr_t)addr); diff --git a/src/user/lib/elfload.c b/src/user/lib/elfload.c index cb7ce58..3862534 100644 --- a/src/user/lib/elfload.c +++ b/src/user/lib/elfload.c @@ -160,7 +160,7 @@ void elf_exec(void *base, char **argv, char **envp) { void *exebase = elf_loadmem(ehdr); if (!exebase) return; - void *newstack = _sys_memflag((void*)0x11000, 0x1000, MEMFLAG_FINDFREE | MEMFLAG_PRESENT); + void *newstack = _sys_memflag((void*)0x11000, 0x1000, MEMFLAG_FINDFREE | MEMFLAG_PRESENT) + 0x1000 - 8; if (!newstack) return; _freejmp_chstack(exebase + ehdr->e_entry, exebase, elf_spread(ehdr) + 0x1000, (const char**)argv, envp, newstack); |