]> git.baikalelectronics.ru Git - kernel.git/commit
x86/mm/vsyscall: Consider vsyscall page part of user address space
authorDave Hansen <dave.hansen@linux.intel.com>
Fri, 28 Sep 2018 16:02:30 +0000 (09:02 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 9 Oct 2018 14:51:16 +0000 (16:51 +0200)
commit5ce6cbfc1961c8219f96c37c588266d6354bbd79
tree72943e280748f96d02b2c81ebb439b6ba3aaa693
parent79e802d5965120b4b28583e846c6be12f4f3e4f1
x86/mm/vsyscall: Consider vsyscall page part of user address space

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: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180928160230.6E9336EE@viggo.jf.intel.com
arch/x86/mm/fault.c