From 78c6d9bd19a8ca8a1ae32d2ad8e1087ba3a7e464 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 15 Oct 2006 14:09:55 -0700 Subject: [PATCH] --- yaml --- r: 39623 b: refs/heads/master c: 80c5606c3b45e0176c32d3108ade1e1cb0b954f3 h: refs/heads/master i: 39621: d0c8679a08e4c47b03de0915aa6836fbe64e37b7 39619: 42edb23de15c47fda5068a01acf2b3739398e027 39615: 0c530ba56e542acef9145bb5b3eedb81e79dbf9a v: v3 --- [refs] | 2 +- trunk/mm/mmap.c | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 5fa957b3225c..6a950ce1e0a2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a7a0d86f5aa40a2215e36fe21d7911cf718ba428 +refs/heads/master: 80c5606c3b45e0176c32d3108ade1e1cb0b954f3 diff --git a/trunk/mm/mmap.c b/trunk/mm/mmap.c index eea8eefd51a8..497e502dfd6b 100644 --- a/trunk/mm/mmap.c +++ b/trunk/mm/mmap.c @@ -900,17 +900,6 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, int accountable = 1; unsigned long charged = 0, reqprot = prot; - if (file) { - if (is_file_hugepages(file)) - accountable = 0; - - if (!file->f_op || !file->f_op->mmap) - return -ENODEV; - - if ((prot & PROT_EXEC) && - (file->f_vfsmnt->mnt_flags & MNT_NOEXEC)) - return -EPERM; - } /* * Does the application expect PROT_READ to imply PROT_EXEC? * @@ -1000,6 +989,16 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, case MAP_PRIVATE: if (!(file->f_mode & FMODE_READ)) return -EACCES; + if (file->f_vfsmnt->mnt_flags & MNT_NOEXEC) { + if (vm_flags & VM_EXEC) + return -EPERM; + vm_flags &= ~VM_MAYEXEC; + } + if (is_file_hugepages(file)) + accountable = 0; + + if (!file->f_op || !file->f_op->mmap) + return -ENODEV; break; default: