Re: [PATCH 03/17] x86, mpx: trace #BR exceptions

From: Borislav Petkov
Date: Fri Mar 27 2015 - 06:23:42 EST


Adding rostedt for the TPs.

Steve, please take a look at the rest of the patchset too, there are
more tracepoints being added.

On Thu, Mar 26, 2015 at 11:33:36AM -0700, Dave Hansen wrote:
>
> From: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
>
> This is the first in a series of MPX tracing patches.
> I've found these extremely useful in the process of
> debugging applications and the kernel code itself.
>
> This exception hooks in to the bounds (#BR) exception
> very early and allows capturing the key registers which
> would influence how the exception is handled.
>
> Note that bndcfgu/bndstatus are technically still
> 64-bit registers even in 32-bit mode.
>
> Signed-off-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
> ---
>
> b/arch/x86/include/asm/trace/mpx.h | 48 +++++++++++++++++++++++++++++++++++++
> b/arch/x86/kernel/traps.c | 2 +
> b/arch/x86/mm/mpx.c | 3 ++
> 3 files changed, 53 insertions(+)
>
> diff -puN /dev/null arch/x86/include/asm/trace/mpx.h
> --- /dev/null 2014-10-10 16:10:57.316716958 -0700
> +++ b/arch/x86/include/asm/trace/mpx.h 2015-03-26 11:27:05.444236170 -0700
> @@ -0,0 +1,48 @@
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM mpx
> +
> +#if !defined(_TRACE_MPX_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_MPX_H
> +
> +#include <linux/tracepoint.h>
> +
> +#ifdef CONFIG_X86_INTEL_MPX
> +
> +TRACE_EVENT(bounds_exception_mpx,
> +
> + TP_PROTO(struct bndcsr *bndcsr),
> + TP_ARGS(bndcsr),
> +
> + TP_STRUCT__entry(
> + __field(u64, bndcfgu)
> + __field(u64, bndstatus)
> + ),
> +
> + TP_fast_assign(
> + __entry->bndcfgu = bndcsr->bndcfgu;
> + __entry->bndstatus = 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(struct bndcsr *bndcsr)
> +{
> +}
> +
> +#endif /* CONFIG_X86_INTEL_MPX */
> +
> +#undef TRACE_INCLUDE_PATH
> +#define TRACE_INCLUDE_PATH asm/trace/
> +#define TRACE_INCLUDE_FILE mpx
> +#endif /* _TRACE_MPX_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> diff -puN arch/x86/kernel/traps.c~x86-br-exception-trace arch/x86/kernel/traps.c
> --- a/arch/x86/kernel/traps.c~x86-br-exception-trace 2015-03-26 11:27:05.439235945 -0700
> +++ b/arch/x86/kernel/traps.c 2015-03-26 11:27:05.445236215 -0700
> @@ -61,6 +61,7 @@
> #include <asm/mach_traps.h>
> #include <asm/alternative.h>
> #include <asm/mpx.h>
> +#include <asm/trace/mpx.h>
> #include <asm/xsave.h>
>
> #ifdef CONFIG_X86_64
> @@ -401,6 +402,7 @@ dotraplinkage void do_bounds(struct pt_r
> 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 -puN arch/x86/mm/mpx.c~x86-br-exception-trace arch/x86/mm/mpx.c
> --- a/arch/x86/mm/mpx.c~x86-br-exception-trace 2015-03-26 11:27:05.441236035 -0700
> +++ b/arch/x86/mm/mpx.c 2015-03-26 11:27:05.445236215 -0700
> @@ -18,6 +18,9 @@
> #include <asm/processor.h>
> #include <asm/fpu-internal.h>
>
> +#define CREATE_TRACE_POINTS
> +#include <asm/trace/mpx.h>
> +
> static const char *mpx_mapping_name(struct vm_area_struct *vma)
> {
> return "[mpx]";
> _
> --
> 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/
>

--
Regards/Gruss,
Boris.

ECO tip #101: Trim your mails when you reply.
--
--
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/