From: Dave Hansen <dave.han...@linux.intel.com>

There are two basic things that can happen as the result of
a bounds exception (#BR):

        1. We allocate a new bounds table
        2. We pass up a bounds exception to userspace.

This patch adds a trace point for the case where we are
passing the exception up to userspace with a signal.

We are also explicit that we're printing out the inverse of
the 'upper' that we encounter.  If you want to filter, for
instance, you need to ~ the value first.

Signed-off-by: Dave Hansen <dave.han...@linux.intel.com>
---

 b/arch/x86/include/asm/trace/mpx.h |   25 +++++++++++++++++++++++++
 b/arch/x86/mm/mpx.c                |    2 ++
 2 files changed, 27 insertions(+)

diff -puN arch/x86/include/asm/trace/mpx.h~x86-mpx-trace-1 
arch/x86/include/asm/trace/mpx.h
--- a/arch/x86/include/asm/trace/mpx.h~x86-mpx-trace-1  2015-03-31 
16:41:56.817305954 -0700
+++ b/arch/x86/include/asm/trace/mpx.h  2015-03-31 16:41:56.822306179 -0700
@@ -8,6 +8,31 @@
 
 #ifdef CONFIG_X86_INTEL_MPX
 
+TRACE_EVENT(mpx_bounds_register_exception,
+
+       TP_PROTO(void *addr_referenced,
+                struct bndreg *bndreg),
+       TP_ARGS(addr_referenced, bndreg),
+
+       TP_STRUCT__entry(
+               __field(void *, addr_referenced)
+               __field(u64, lower_bound)
+               __field(u64, upper_bound)
+       ),
+
+       TP_fast_assign(
+               __entry->addr_referenced = addr_referenced;
+               __entry->lower_bound = bndreg->lower_bound;
+               __entry->upper_bound = bndreg->upper_bound;
+       ),
+
+       TP_printk("address referenced: 0x%p bounds: lower: 0x%llx ~upper: 
0x%llx",
+               __entry->addr_referenced,
+               __entry->lower_bound,
+               ~__entry->upper_bound
+       )
+);
+
 TRACE_EVENT(bounds_exception_mpx,
 
        TP_PROTO(struct bndcsr *bndcsr),
diff -puN arch/x86/mm/mpx.c~x86-mpx-trace-1 arch/x86/mm/mpx.c
--- a/arch/x86/mm/mpx.c~x86-mpx-trace-1 2015-03-31 16:41:56.819306044 -0700
+++ b/arch/x86/mm/mpx.c 2015-03-31 16:41:56.822306179 -0700
@@ -16,6 +16,7 @@
 #include <asm/mmu_context.h>
 #include <asm/mpx.h>
 #include <asm/processor.h>
+#include <asm/trace/mpx.h>
 #include <asm/fpu-internal.h>
 
 #define CREATE_TRACE_POINTS
@@ -337,6 +338,7 @@ siginfo_t *mpx_generate_siginfo(struct p
                err = -EINVAL;
                goto err_out;
        }
+       trace_mpx_bounds_register_exception(info->si_addr, bndreg);
        return info;
 err_out:
        /* info might be NULL, but kfree() handles that */
_
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to