> -----Original Message----- > From: Steven Rostedt [mailto:[email protected]] > Sent: Friday, September 06, 2013 12:50 PM > To: Seiji Aguchi > Cc: [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; Tomoki Sekiyama > Subject: Re: [PATCH v2] Introduce page fault tracepoint > > On Fri, 23 Aug 2013 11:37:43 -0400 > Seiji Aguchi <[email protected]> wrote: > > > > +#if !defined(_TRACE_PAGE_FAULT_H) || defined(TRACE_HEADER_MULTI_READ) > > +#define _TRACE_PAGE_FAULT_H > > + > > +#include <linux/tracepoint.h> > > + > > +extern void trace_irq_vector_regfunc(void); > > +extern void trace_irq_vector_unregfunc(void); > > + > > +DECLARE_EVENT_CLASS(x86_exceptions, > > + > > + TP_PROTO(unsigned long address, struct pt_regs *regs, > > + unsigned long error_code), > > + > > + TP_ARGS(address, regs, error_code), > > + > > + TP_STRUCT__entry( > > + __field( unsigned long, address ) > > + __field( struct pt_regs *, regs ) > > + __field( unsigned long, error_code ) > > + ), > > + > > + TP_fast_assign( > > + __entry->address = address; > > + __entry->regs = regs; > > + __entry->error_code = error_code; > > + ), > > + > > + TP_printk("address=0x%lx ip=0x%lx error_code=0x%lx", > > + __entry->address, __entry->regs->ip, __entry->error_code) ); > > This is sure to crash the kernel. > > You just saved the address of a pointer to some task's stack in the > ring buffer. And then on output (which can happen a long time from when > it was recorded), you are dereferencing that same address! > > That __entry->regs->ip *will* crash the kernel! > > What you want is to save ip in the fast_assign: > > __entry->ip = regs->ip > > And then print that. Never dereference a pointer directly from the ring > buffer unless it's a constant value (like a global string).
I see.. Thank you for reviewing. I will fix it. Seiji -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

