aboutsummaryrefslogtreecommitdiffstats
path: root/security
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-12 16:50:21 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-12 16:50:21 -0500
commit6bec0035286119eefc32a5b1102127e6a4032cb2 (patch)
tree440fab001b4c877b0b0c9fd62d8392e956e387e3 /security
parent5d8e7fb6916556e9b476de33404e8c9e2c9aee61 (diff)
parent15d0f5ea348b9c4e6d41df294dde38a56a39c7bf (diff)
Merge branch 'for-3.20/bdi' of git://git.kernel.dk/linux-block
Pull backing device changes from Jens Axboe: "This contains a cleanup of how the backing device is handled, in preparation for a rework of the life time rules. In this part, the most important change is to split the unrelated nommu mmap flags from it, but also removing a backing_dev_info pointer from the address_space (and inode), and a cleanup of other various minor bits. Christoph did all the work here, I just fixed an oops with pages that have a swap backing. Arnd fixed a missing export, and Oleg killed the lustre backing_dev_info from staging. Last patch was from Al, unexporting parts that are now no longer needed outside" * 'for-3.20/bdi' of git://git.kernel.dk/linux-block: Make super_blocks and sb_lock static mtd: export new mtd_mmap_capabilities fs: make inode_to_bdi() handle NULL inode staging/lustre/llite: get rid of backing_dev_info fs: remove default_backing_dev_info fs: don't reassign dirty inodes to default_backing_dev_info nfs: don't call bdi_unregister ceph: remove call to bdi_unregister fs: remove mapping->backing_dev_info fs: export inode_to_bdi and use it in favor of mapping->backing_dev_info nilfs2: set up s_bdi like the generic mount_bdev code block_dev: get bdev inode bdi directly from the block device block_dev: only write bdev inode on close fs: introduce f_op->mmap_capabilities for nommu mmap support fs: kill BDI_CAP_SWAP_BACKED fs: deduplicate noop_backing_dev_info
Diffstat (limited to 'security')
-rw-r--r--security/security.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/security/security.c b/security/security.c
index 18b35c63fc0c..a0442b20f001 100644
--- a/security/security.c
+++ b/security/security.c
@@ -726,16 +726,15 @@ static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
726 return prot | PROT_EXEC; 726 return prot | PROT_EXEC;
727 /* 727 /*
728 * ditto if it's not on noexec mount, except that on !MMU we need 728 * ditto if it's not on noexec mount, except that on !MMU we need
729 * BDI_CAP_EXEC_MMAP (== VM_MAYEXEC) in this case 729 * NOMMU_MAP_EXEC (== VM_MAYEXEC) in this case
730 */ 730 */
731 if (!(file->f_path.mnt->mnt_flags & MNT_NOEXEC)) { 731 if (!(file->f_path.mnt->mnt_flags & MNT_NOEXEC)) {
732#ifndef CONFIG_MMU 732#ifndef CONFIG_MMU
733 unsigned long caps = 0; 733 if (file->f_op->mmap_capabilities) {
734 struct address_space *mapping = file->f_mapping; 734 unsigned caps = file->f_op->mmap_capabilities(file);
735 if (mapping && mapping->backing_dev_info) 735 if (!(caps & NOMMU_MAP_EXEC))
736 caps = mapping->backing_dev_info->capabilities; 736 return prot;
737 if (!(caps & BDI_CAP_EXEC_MAP)) 737 }
738 return prot;
739#endif 738#endif
740 return prot | PROT_EXEC; 739 return prot | PROT_EXEC;
741 } 740 }