Skip to content
  • Piotr Kwapulinski's avatar
    mm/mprotect.c: don't imply PROT_EXEC on non-exec fs · f138556d
    Piotr Kwapulinski authored
    
    
    The mprotect(PROT_READ) fails when called by the READ_IMPLIES_EXEC
    binary on a memory mapped file located on non-exec fs.  The mprotect
    does not check whether fs is _executable_ or not.  The PROT_EXEC flag is
    set automatically even if a memory mapped file is located on non-exec
    fs.  Fix it by checking whether a memory mapped file is located on a
    non-exec fs.  If so the PROT_EXEC is not implied by the PROT_READ.  The
    implementation uses the VM_MAYEXEC flag set properly in mmap.  Now it is
    consistent with mmap.
    
    I did the isolated tests (PT_GNU_STACK X/NX, multiple VMAs, X/NX fs).  I
    also patched the official 3.19.0-47-generic Ubuntu 14.04 kernel and it
    seems to work.
    
    Signed-off-by: default avatarPiotr Kwapulinski <kwapulinski.piotr@gmail.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Konstantin Khlebnikov <koct9i@gmail.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f138556d