• Dave Hansen's avatar
    x86/mm/pkeys: Optimize fault handling in access_error() · 07f146f5
    Dave Hansen authored
    We might not strictly have to make modifictions to
    access_error() to check the VMA here.
    
    If we do not, we will do this:
    
     1. app sets VMA pkey to K
     2. app touches a !present page
     3. do_page_fault(), allocates and maps page, sets pte.pkey=K
     4. return to userspace
     5. touch instruction reexecutes, but triggers PF_PK
     6. do PKEY signal
    
    What happens with this patch applied:
    
     1. app sets VMA pkey to K
     2. app touches a !present page
     3. do_page_fault() notices that K is inaccessible
     4. do PKEY signal
    
    We basically skip the fault that does an allocation.
    
    So what this lets us do is protect areas from even being
    *populated* unless it is accessible according to protection
    keys.  That seems handy to me and makes protection keys work
    more like an mprotect()'d mapping.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave@sr71.net>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/20160212210222.EBB63D8C@viggo.jf.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    07f146f5
fault.c 36 KB