[lkml]   [2021]   [Jan]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH 10/11] x86/fault: Don't run fixups for SMAP violations
A SMAP-violating kernel access is not a recoverable condition.  Imagine
kernel code that, outside of a uaccess region, dereferences a pointer to
the user range by accident. If SMAP is on, this will reliably generate
as an intentional user access. This makes it easy for bugs to be
overlooked if code is inadequately tested both with and without SMAP.

We discovered this because BPF can generate invalid accesses to user
memory, but those warnings only got printed if SMAP was off. With this
patch, this type of error will be discovered with SMAP on as well.

Cc: Yonghong Song <>
Cc: Dave Hansen <>
Cc: Peter Zijlstra <>
Cc: Alexei Starovoitov <>
Cc: Daniel Borkmann <>
Signed-off-by: Andy Lutomirski <>
arch/x86/mm/fault.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 04cc98ec2423..d39946ad8a91 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -1242,7 +1242,11 @@ void do_user_addr_fault(struct pt_regs *regs,
!(error_code & X86_PF_USER) &&
!(regs->flags & X86_EFLAGS_AC)))
- bad_area_nosemaphore(regs, error_code, address);
+ /*
+ * No extable entry here. This was a kernel access to an
+ * invalid pointer. get_kernel_nofault() will not get here.
+ */
+ page_fault_oops(regs, error_code, address);

 \ /
  Last update: 2021-01-31 21:05    [W:0.099 / U:0.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site