Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6-block.git] / security / security.c
index b196de34b19ff91a8b44404a733f741a430dcabb..e81d5bbe7363fc689199ea8db3a1a5fdc3e720e4 100644 (file)
@@ -749,16 +749,15 @@ static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
                return prot | PROT_EXEC;
        /*
         * ditto if it's not on noexec mount, except that on !MMU we need
-        * BDI_CAP_EXEC_MMAP (== VM_MAYEXEC) in this case
+        * NOMMU_MAP_EXEC (== VM_MAYEXEC) in this case
         */
        if (!(file->f_path.mnt->mnt_flags & MNT_NOEXEC)) {
 #ifndef CONFIG_MMU
-               unsigned long caps = 0;
-               struct address_space *mapping = file->f_mapping;
-               if (mapping && mapping->backing_dev_info)
-                       caps = mapping->backing_dev_info->capabilities;
-               if (!(caps & BDI_CAP_EXEC_MAP))
-                       return prot;
+               if (file->f_op->mmap_capabilities) {
+                       unsigned caps = file->f_op->mmap_capabilities(file);
+                       if (!(caps & NOMMU_MAP_EXEC))
+                               return prot;
+               }
 #endif
                return prot | PROT_EXEC;
        }