• Dave Hansen's avatar
    x86/mm/vsyscall: Consider vsyscall page part of user address space · 3ae0ad92
    Dave Hansen authored
    
    
    The vsyscall page is weird.  It is in what is traditionally part of
    the kernel address space.  But, it has user permissions and we handle
    faults on it like we would on a user page: interrupts on.
    
    Right now, we handle vsyscall emulation in the "bad_area" code, which
    is used for both user-address-space and kernel-address-space faults.
    Move the handling to the user-address-space code *only* and ensure we
    get there by "excluding" the vsyscall page from the kernel address
    space via a check in fault_in_kernel_space().
    
    Since the fault_in_kernel_space() check is used on 32-bit, also add a
    64-bit check to make it clear we only use this path on 64-bit.  Also
    move the unlikely() to be in is_vsyscall_vaddr() itself.
    
    This helps clean up the kernel fault handling path by removing a case
    that can happen in normal[1] operation.  (Yeah, yeah, we can argue
    about the vsyscall page being "normal" or not.)  This also makes
    sanity checks easier, like the "we never take pkey faults in the
    kernel address space" check in the next patch.
    
    Cc: x86@kernel.org
    Cc: Jann Horn <jannh@google.com>
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20180928160230.6E9336EE@viggo.jf.intel.com
    3ae0ad92
fault.c 39.9 KB