From: Alan Cox Date: Mon, 3 Sep 2018 20:21:26 +0000 (+0100) Subject: syscall_proc: make brk() error more useful, stop brk below base X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=e57964bfdb5da997e0691f7ab83dad28317d9563;p=FUZIX.git syscall_proc: make brk() error more useful, stop brk below base --- diff --git a/Kernel/syscall_proc.c b/Kernel/syscall_proc.c index 93b10358..17bbc7a0 100644 --- a/Kernel/syscall_proc.c +++ b/Kernel/syscall_proc.c @@ -227,15 +227,21 @@ arg_t _brk(void) can keep it portable */ if (addr >= brk_limit()) { - kprintf("%d: out of memory\n", udata.u_ptab->p_pid); + kprintf("%d: out of memory by %d\n", udata.u_ptab->p_pid, + addr - brk_limit()); udata.u_error = ENOMEM; return -1; } +#if (PROGBASE > 0) + if (addr < PROGBASE) { + udata.u_error = EINVAL; + return -1; + } +#endif /* If we have done a break that gives us more room we must zero the extra as we no longer guarantee it is clear already */ if (addr > udata.u_break) uzero((void *)udata.u_break, addr - udata.u_break); - /* FIXME: review can brk() below base address */ udata.u_break = addr; return 0; }