aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mremap.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mremap.c')
-rw-r--r--mm/mremap.c26
1 files changed, 5 insertions, 21 deletions
diff --git a/mm/mremap.c b/mm/mremap.c
index db8d983b5a7d..21fed202ddad 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -371,10 +371,6 @@ static unsigned long mremap_to(unsigned long addr,
371 if ((addr <= new_addr) && (addr+old_len) > new_addr) 371 if ((addr <= new_addr) && (addr+old_len) > new_addr)
372 goto out; 372 goto out;
373 373
374 ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1);
375 if (ret)
376 goto out;
377
378 ret = do_munmap(mm, new_addr, new_len); 374 ret = do_munmap(mm, new_addr, new_len);
379 if (ret) 375 if (ret)
380 goto out; 376 goto out;
@@ -432,15 +428,17 @@ static int vma_expandable(struct vm_area_struct *vma, unsigned long delta)
432 * MREMAP_FIXED option added 5-Dec-1999 by Benjamin LaHaise 428 * MREMAP_FIXED option added 5-Dec-1999 by Benjamin LaHaise
433 * This option implies MREMAP_MAYMOVE. 429 * This option implies MREMAP_MAYMOVE.
434 */ 430 */
435unsigned long do_mremap(unsigned long addr, 431SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
436 unsigned long old_len, unsigned long new_len, 432 unsigned long, new_len, unsigned long, flags,
437 unsigned long flags, unsigned long new_addr) 433 unsigned long, new_addr)
438{ 434{
439 struct mm_struct *mm = current->mm; 435 struct mm_struct *mm = current->mm;
440 struct vm_area_struct *vma; 436 struct vm_area_struct *vma;
441 unsigned long ret = -EINVAL; 437 unsigned long ret = -EINVAL;
442 unsigned long charged = 0; 438 unsigned long charged = 0;
443 439
440 down_write(&current->mm->mmap_sem);
441
444 if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) 442 if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
445 goto out; 443 goto out;
446 444
@@ -530,25 +528,11 @@ unsigned long do_mremap(unsigned long addr,
530 goto out; 528 goto out;
531 } 529 }
532 530
533 ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1);
534 if (ret)
535 goto out;
536 ret = move_vma(vma, addr, old_len, new_len, new_addr); 531 ret = move_vma(vma, addr, old_len, new_len, new_addr);
537 } 532 }
538out: 533out:
539 if (ret & ~PAGE_MASK) 534 if (ret & ~PAGE_MASK)
540 vm_unacct_memory(charged); 535 vm_unacct_memory(charged);
541 return ret;
542}
543
544SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
545 unsigned long, new_len, unsigned long, flags,
546 unsigned long, new_addr)
547{
548 unsigned long ret;
549
550 down_write(&current->mm->mmap_sem);
551 ret = do_mremap(addr, old_len, new_len, flags, new_addr);
552 up_write(&current->mm->mmap_sem); 536 up_write(&current->mm->mmap_sem);
553 return ret; 537 return ret;
554} 538}