/* * use any slack space at the end of the process space due to memory * allocator inefficiencies to implement a limited brk() function and * maybe save some memory by using what we already have. * * This does require a user space malloc that knows about brk() but * doesn't rely on it exclusively. * * davidm@lineo.com */ asmlinkage unsigned long sys_brk(unsigned long brk) { #ifdef maybe_later unsigned long rlim; #endif struct mm_struct *mm = current->mm; if (brk < mm->end_code || brk < mm->start_brk || brk > mm->end_brk) return mm->brk; if (mm->brk == brk) return mm->brk; /* * Always allow shrinking brk */ if (brk <= mm->brk) { mm->brk = brk; return brk; } #ifdef maybe_later /* * Check against rlimit and stack.. */ rlim = current->rlim[RLIMIT_DATA].rlim_cur; if (rlim >= RLIM_INFINITY) rlim = ~0; if (brk - mm->end_code > rlim) return mm->brk; #endif /* * Ok, looks good - let it rip. */ return mm->brk = brk; }