[PATCH 04/17] x86, mpx: trace entry to bounds exception paths

From: Dave Hansen
Date: Wed Apr 22 2015 - 14:28:31 EST



From: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>

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.hansen@xxxxxxxxxxxxxxx>
---

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-04-22 11:16:19.051857884 -0700
+++ b/arch/x86/include/asm/trace/mpx.h 2015-04-22 11:16:19.056858109 -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-04-22 11:16:19.053857974 -0700
+++ b/arch/x86/mm/mpx.c 2015-04-22 11:16:19.057858154 -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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/