• Mike Frysinger's avatar
    FDPIC: Respect PT_GNU_STACK exec protection markings when creating NOMMU stack · 04e4f2b1
    Mike Frysinger authored
    The current code will load the stack size and protection markings, but
    then only use the markings in the MMU code path.  The NOMMU code path
    always passes PROT_EXEC to the mmap() call.  While this doesn't matter
    to most people whilst the code is running, it will cause a pointless
    icache flush when starting every FDPIC application.  Typically this
    icache flush will be of a region on the order of 128KB in size, or may
    be the entire icache, depending on the facilities available on the CPU.
    
    In the case where the arch default behaviour seems to be desired
    (EXSTACK_DEFAULT), we probe VM_STACK_FLAGS for VM_EXEC to determine
    whether we should be setting PROT_EXEC or not.
    
    For arches that support an MPU (Memory Protection Unit - an MMU without
    the virtual mapping capability), setting PROT_EXEC or not will make an
    important difference.
    
    It should be noted that this change also affects the executability of
    the brk region, since ELF-FDPIC has that share with the stack.  However,
    this is probably irrelevant as NOMMU programs aren't likely to use the
    brk region, preferring instead allocation via mmap().
    Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    04e4f2b1
binfmt_elf_fdpic.c 47.7 KB