android_kernel_motorola_sm6375/kernel/trace
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Zijlstra d5b5f391d4 ftrace, perf: Avoid infinite event generation loop
Vince's perf-trinity fuzzer found yet another 'interesting' problem.

When we sample the irq_work_exit tracepoint with period==1 (or
PERF_SAMPLE_PERIOD) and we add an fasync SIGNAL handler we create an
infinite event generation loop:

  ,-> <IPI>
  |     irq_work_exit() ->
  |       trace_irq_work_exit() ->
  |         ...
  |           __perf_event_overflow() -> (due to fasync)
  |             irq_work_queue() -> (irq_work_list must be empty)
  '---------      arch_irq_work_raise()

Similar things can happen due to regular poll() wakeups if we exceed
the ring-buffer wakeup watermark, or have an event_limit.

To avoid this, dis-allow sampling this particular tracepoint.

In order to achieve this, create a special perf_perm function pointer
for each event and call this (when set) on trying to create a
tracepoint perf event.

[ roasted: use expr... to allow for ',' in your expression ]

Reported-by: Vince Weaver <vincent.weaver@maine.edu>
Tested-by: Vince Weaver <vincent.weaver@maine.edu>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Dave Jones <davej@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Link: http://lkml.kernel.org/r/20131114152304.GC5364@laptop.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2013-11-19 16:57:40 +01:00
..
blktrace.c kernel: trace: blktrace: remove redundent memcpy() in compat_blk_trace_setup() 2013-11-08 09:04:30 -07:00
ftrace.c tracing: Make register/unregister_ftrace_command __init 2013-11-05 17:43:40 -05:00
Kconfig ring-buffer: Select IRQ_WORK 2013-05-03 19:24:17 -04:00
Makefile
power-traces.c
ring_buffer.c tracing: Typo fix on ring buffer comments 2013-07-18 21:31:26 -04:00
ring_buffer_benchmark.c
rpm-traces.c
trace.c This batch of changes is mostly clean ups and small bug fixes. 2013-11-16 12:23:18 -08:00
trace.h This batch of changes is mostly clean ups and small bug fixes. 2013-11-16 12:23:18 -08:00
trace_branch.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_clock.c
trace_entries.h
trace_event_perf.c ftrace, perf: Avoid infinite event generation loop 2013-11-19 16:57:40 +01:00
trace_events.c tracing: Do not assign filp->private_data to freed memory 2013-11-06 15:26:54 -05:00
trace_events_filter.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_events_filter_test.h
trace_export.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_functions.c tracing: Add ref_data to function and fgraph tracer structs 2013-07-18 21:31:31 -04:00
trace_functions_graph.c tracing: Do not use signed enums with unsigned long long in fgragh output 2013-11-06 15:26:56 -05:00
trace_irqsoff.c tracing: Use flag buffer_disabled for irqsoff tracer 2013-07-01 20:34:28 -04:00
trace_kdb.c
trace_kprobe.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_mmiotrace.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_nop.c
trace_output.c ftrace, sched: Add TRACE_FLAG_PREEMPT_RESCHED 2013-11-11 12:43:39 +01:00
trace_output.h
trace_printk.c tracing: Add __tracepoint_string() to export string pointers 2013-07-26 13:39:44 -04:00
trace_probe.c
trace_probe.h
trace_sched_switch.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00
trace_sched_wakeup.c
trace_selftest.c ftrace: Do not run selftest if command line parameter is set 2013-07-01 20:57:15 -04:00
trace_selftest_dynamic.c
trace_stack.c Tracing updates for Linux 3.10 2013-04-29 13:55:38 -07:00
trace_stat.c trace/trace_stat: use rbtree postorder iteration helper instead of opencoding 2013-11-05 16:01:47 -05:00
trace_stat.h
trace_syscalls.c tracing: Add support for SOFT_DISABLE to syscall events 2013-11-05 17:48:49 -05:00
trace_uprobe.c tracing: Update event filters for multibuffer 2013-11-05 16:50:20 -05:00