diff --git a/arch/x86/include/asm/trace/mpx.h b/arch/x86/include/asm/trace/mpx.h new file mode 100644 index 0000000000000000000000000000000000000000..5c03ec8a90d64f25a0b76b1361048e56329350c5 --- /dev/null +++ b/arch/x86/include/asm/trace/mpx.h @@ -0,0 +1,50 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mpx + +#if !defined(_TRACE_MPX_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_MPX_H + +#include + +#ifdef CONFIG_X86_INTEL_MPX + +TRACE_EVENT(bounds_exception_mpx, + + TP_PROTO(const struct bndcsr *bndcsr), + TP_ARGS(bndcsr), + + TP_STRUCT__entry( + __field(u64, bndcfgu) + __field(u64, bndstatus) + ), + + TP_fast_assign( + /* need to get rid of the 'const' on bndcsr */ + __entry->bndcfgu = (u64)bndcsr->bndcfgu; + __entry->bndstatus = (u64)bndcsr->bndstatus; + ), + + TP_printk("bndcfgu:0x%llx bndstatus:0x%llx", + __entry->bndcfgu, + __entry->bndstatus) +); + +#else + +/* + * This gets used outside of MPX-specific code, so we need a stub. + */ +static inline void trace_bounds_exception_mpx(const struct bndcsr *bndcsr) +{ +} + +#endif /* CONFIG_X86_INTEL_MPX */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH asm/trace/ +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE mpx +#endif /* _TRACE_MPX_H */ + +/* This part must be outside protection */ +#include diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index cffff669be3fe9d84be18eedc40519b1f5d6641b..36cb15b7b367e38937f8aefa65098e6863ce08c9 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #ifdef CONFIG_X86_64 @@ -399,6 +400,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) 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 diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c index d6e02f3adee0911299189f9ff13fbf200a4aad51..1fef52c17fc890e144a26ec475b38fb5f6ed1484 100644 --- a/arch/x86/mm/mpx.c +++ b/arch/x86/mm/mpx.c @@ -17,6 +17,9 @@ #include #include +#define CREATE_TRACE_POINTS +#include + static const char *mpx_mapping_name(struct vm_area_struct *vma) { return "[mpx]";