Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24-git17 /mm/mmap.c

Filename:/mm/mmap.c
Lines Added:11
Lines Deleted:6
Also changed in: (Previous) 2.6.24-git16  2.6.24-git15  2.6.24-git14  2.6.24-git13  2.6.24-git12  2.6.24-git11 
(Following) 2.6.24.1-rc1  2.6.24-git18  2.6.24-git19  2.6.24.1  2.6.24-git20  2.6.24-git21 

Location
[  2.6.24-git17
  [  mm
     o  mmap.c

Patch

diff --git a/mm/mmap.c b/mm/mmap.c
index 15678aa..ad6e4ea 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -36,6 +36,10 @@
 #define arch_mmap_check(addr, len, flags)   (0)
 #endif
 
+#ifndef arch_rebalance_pgtables
+#define arch_rebalance_pgtables(addr, len)      (addr)
+#endif
+
 static void unmap_region(struct mm_struct *mm,
       struct vm_area_struct *vma, struct vm_area_struct *prev,
       unsigned long start, unsigned long end);
@@ -241,7 +245,7 @@ asmlinkage unsigned long sys_brk(unsigned long brk)
 
    down_write(&mm->mmap_sem);
 
-   if (brk < mm->end_code)
+   if (brk < mm->start_brk)
       goto out;
 
    /*
@@ -251,7 +255,8 @@ asmlinkage unsigned long sys_brk(unsigned long brk)
     * not page aligned -Ram Gupta
     */
    rlim = current->signal->rlim[RLIMIT_DATA].rlim_cur;
-   if (rlim < RLIM_INFINITY && brk - mm->start_data > rlim)
+   if (rlim < RLIM_INFINITY && (brk - mm->start_brk) +
+         (mm->end_data - mm->start_data) > rlim)
       goto out;
 
    newbrk = PAGE_ALIGN(brk);
@@ -1423,7 +1428,7 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
    if (addr & ~PAGE_MASK)
       return -EINVAL;
 
-   return addr;
+   return arch_rebalance_pgtables(addr, len);
 }
 
 EXPORT_SYMBOL(get_unmapped_area);
@@ -1620,7 +1625,7 @@ static inline int expand_downwards(struct vm_area_struct *vma,
       return -ENOMEM;
 
    address &= PAGE_MASK;
-   error = security_file_mmap(0, 0, 0, 0, address, 1);
+   error = security_file_mmap(NULL, 0, 0, 0, address, 1);
    if (error)
       return error;
 
@@ -1941,7 +1946,7 @@ unsigned long do_brk(unsigned long addr, unsigned long len)
    if (is_hugepage_only_range(mm, addr, len))
       return -EINVAL;
 
-   error = security_file_mmap(0, 0, 0, 0, addr, 1);
+   error = security_file_mmap(NULL, 0, 0, 0, addr, 1);
    if (error)
       return error;
 
@@ -2215,7 +2220,7 @@ int install_special_mapping(struct mm_struct *mm,
    vma->vm_start = addr;
    vma->vm_end = addr + len;
 
-   vma->vm_flags = vm_flags | mm->def_flags;
+   vma->vm_flags = vm_flags | mm->def_flags | VM_DONTEXPAND;
    vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
 
    vma->vm_ops = &special_mapping_vmops;


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.