x86/mpx: remove bounds exception code
authorDave Hansen <dave.hansen@linux.intel.com>
Thu, 23 Jan 2020 18:41:15 +0000 (10:41 -0800)
committerDave Hansen <dave.hansen@intel.com>
Thu, 23 Jan 2020 18:41:15 +0000 (10:41 -0800)
From: Dave Hansen <dave.hansen@linux.intel.com>

MPX is being removed from the kernel due to a lack of support
in the toolchain going forward (gcc).

Remove the other user-visible ABI: signal handling.  This code
should basically have been inactive after the prctl()s were
removed, but there may be some small ABI remnants from this code.
Remove it.

Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: x86@kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
arch/x86/kernel/traps.c

index 4bb0f84..6fd5b75 100644 (file)
@@ -57,8 +57,6 @@
 #include <asm/mach_traps.h>
 #include <asm/alternative.h>
 #include <asm/fpu/xstate.h>
-#include <asm/trace/mpx.h>
-#include <asm/mpx.h>
 #include <asm/vm86.h>
 #include <asm/umip.h>
 
@@ -430,8 +428,6 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code, unsign
 
 dotraplinkage void do_bounds(struct pt_regs *regs, long error_code)
 {
-       const struct mpx_bndcsr *bndcsr;
-
        RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
        if (notify_die(DIE_TRAP, "bounds", regs, error_code,
                        X86_TRAP_BR, SIGSEGV) == NOTIFY_STOP)
@@ -441,76 +437,6 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code)
        if (!user_mode(regs))
                die("bounds", regs, error_code);
 
-       if (!cpu_feature_enabled(X86_FEATURE_MPX)) {
-               /* The exception is not from Intel MPX */
-               goto exit_trap;
-       }
-
-       /*
-        * We need to look at BNDSTATUS to resolve this exception.
-        * A NULL here might mean that it is in its 'init state',
-        * which is all zeros which indicates MPX was not
-        * responsible for the exception.
-        */
-       bndcsr = get_xsave_field_ptr(XFEATURE_BNDCSR);
-       if (!bndcsr)
-               goto exit_trap;
-
-       trace_bounds_exception_mpx(bndcsr);
-       /*
-        * The error code field of the BNDSTATUS register communicates status
-        * information of a bound range exception #BR or operation involving
-        * bound directory.
-        */
-       switch (bndcsr->bndstatus & MPX_BNDSTA_ERROR_CODE) {
-       case 2: /* Bound directory has invalid entry. */
-               if (mpx_handle_bd_fault())
-                       goto exit_trap;
-               break; /* Success, it was handled */
-       case 1: /* Bound violation. */
-       {
-               struct task_struct *tsk = current;
-               struct mpx_fault_info mpx;
-
-               if (mpx_fault_info(&mpx, regs)) {
-                       /*
-                        * We failed to decode the MPX instruction.  Act as if
-                        * the exception was not caused by MPX.
-                        */
-                       goto exit_trap;
-               }
-               /*
-                * Success, we decoded the instruction and retrieved
-                * an 'mpx' containing the address being accessed
-                * which caused the exception.  This information
-                * allows and application to possibly handle the
-                * #BR exception itself.
-                */
-               if (!do_trap_no_signal(tsk, X86_TRAP_BR, "bounds", regs,
-                                      error_code))
-                       break;
-
-               show_signal(tsk, SIGSEGV, "trap ", "bounds", regs, error_code);
-
-               force_sig_bnderr(mpx.addr, mpx.lower, mpx.upper);
-               break;
-       }
-       case 0: /* No exception caused by Intel MPX operations. */
-               goto exit_trap;
-       default:
-               die("bounds", regs, error_code);
-       }
-
-       return;
-
-exit_trap:
-       /*
-        * This path out is for all the cases where we could not
-        * handle the exception in some way (like allocating a
-        * table or telling userspace about it.  We will also end
-        * up here if the kernel has MPX turned off at compile
-        * time..
-        */
        do_trap(X86_TRAP_BR, SIGSEGV, "bounds", regs, error_code, 0, NULL);
 }