panic: Allow warnings to set different taint flags
[safe/jmp/linux-2.6] / mm / mmap.c
index 6a0c15d..75557c6 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -554,9 +554,7 @@ again:                      remove_next = 1 + (end > next->vm_end);
                 */
                if (importer && !importer->anon_vma) {
                        /* Block reverse map lookups until things are set up. */
-                       importer->vm_flags |= VM_LOCK_RMAP;
                        if (anon_vma_clone(importer, vma)) {
-                               importer->vm_flags &= ~VM_LOCK_RMAP;
                                return -ENOMEM;
                        }
                        importer->anon_vma = anon_vma;
@@ -618,11 +616,6 @@ again:                     remove_next = 1 + (end > next->vm_end);
                __vma_unlink(mm, next, vma);
                if (file)
                        __remove_shared_vm_struct(next, file, mapping);
-               /*
-                * This VMA is now dead, no need for rmap to follow it.
-                * Call anon_vma_merge below, outside of i_mmap_lock.
-                */
-               next->vm_flags |= VM_LOCK_RMAP;
        } else if (insert) {
                /*
                 * split_vma has split insert from vma, and needs
@@ -635,20 +628,12 @@ again:                    remove_next = 1 + (end > next->vm_end);
        if (mapping)
                spin_unlock(&mapping->i_mmap_lock);
 
-       /*
-        * The current VMA has been set up. It is now safe for the
-        * rmap code to get from the pages to the ptes.
-        */
-       if (anon_vma && importer)
-               importer->vm_flags &= ~VM_LOCK_RMAP;
-
        if (remove_next) {
                if (file) {
                        fput(file);
                        if (next->vm_flags & VM_EXECUTABLE)
                                removed_exe_file_vma(mm);
                }
-               /* Protected by mmap_sem and VM_LOCK_RMAP. */
                if (next->anon_vma)
                        anon_vma_merge(vma, next);
                mm->map_count--;
@@ -1103,6 +1088,30 @@ out:
        return retval;
 }
 
+#ifdef __ARCH_WANT_SYS_OLD_MMAP
+struct mmap_arg_struct {
+       unsigned long addr;
+       unsigned long len;
+       unsigned long prot;
+       unsigned long flags;
+       unsigned long fd;
+       unsigned long offset;
+};
+
+SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
+{
+       struct mmap_arg_struct a;
+
+       if (copy_from_user(&a, arg, sizeof(a)))
+               return -EFAULT;
+       if (a.offset & ~PAGE_MASK)
+               return -EINVAL;
+
+       return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
+                             a.offset >> PAGE_SHIFT);
+}
+#endif /* __ARCH_WANT_SYS_OLD_MMAP */
+
 /*
  * Some shared mappigns will want the pages marked read-only
  * to track write events. If so, we'll downgrade vm_page_prot