mirror of https://gitee.com/openkylin/linux.git
Get rid of open-coding in ia64_brk()
The comment in there used to be true, but these days do_brk() does
the arch-specific check that covers what we open-coded here. So we
can use sys_brk() just fine, only need to do force_successful_syscall_return()
after it.
See commit 3a45975681
- that's when the
checks in do_brk() had been originally added.
Acked-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
05d72faa6d
commit
bb52d66940
|
@ -100,51 +100,7 @@ sys_getpagesize (void)
|
|||
asmlinkage unsigned long
|
||||
ia64_brk (unsigned long brk)
|
||||
{
|
||||
unsigned long rlim, retval, newbrk, oldbrk;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
||||
/*
|
||||
* Most of this replicates the code in sys_brk() except for an additional safety
|
||||
* check and the clearing of r8. However, we can't call sys_brk() because we need
|
||||
* to acquire the mmap_sem before we can do the test...
|
||||
*/
|
||||
down_write(&mm->mmap_sem);
|
||||
|
||||
if (brk < mm->end_code)
|
||||
goto out;
|
||||
newbrk = PAGE_ALIGN(brk);
|
||||
oldbrk = PAGE_ALIGN(mm->brk);
|
||||
if (oldbrk == newbrk)
|
||||
goto set_brk;
|
||||
|
||||
/* Always allow shrinking brk. */
|
||||
if (brk <= mm->brk) {
|
||||
if (!do_munmap(mm, newbrk, oldbrk-newbrk))
|
||||
goto set_brk;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Check against unimplemented/unmapped addresses: */
|
||||
if ((newbrk - oldbrk) > RGN_MAP_LIMIT || REGION_OFFSET(newbrk) > RGN_MAP_LIMIT)
|
||||
goto out;
|
||||
|
||||
/* Check against rlimit.. */
|
||||
rlim = current->signal->rlim[RLIMIT_DATA].rlim_cur;
|
||||
if (rlim < RLIM_INFINITY && brk - mm->start_data > rlim)
|
||||
goto out;
|
||||
|
||||
/* Check against existing mmap mappings. */
|
||||
if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE))
|
||||
goto out;
|
||||
|
||||
/* Ok, looks good - let it rip. */
|
||||
if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk)
|
||||
goto out;
|
||||
set_brk:
|
||||
mm->brk = brk;
|
||||
out:
|
||||
retval = mm->brk;
|
||||
up_write(&mm->mmap_sem);
|
||||
unsigned long retval = sys_brk(brk);
|
||||
force_successful_syscall_return();
|
||||
return retval;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue