Files
kernel_google_wahoo/include/linux
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
..
2013-08-14 13:55:15 +05:30
2013-07-30 11:53:12 -04:00
2013-05-29 15:50:34 -04:00
2013-11-08 08:59:44 -07:00
2013-10-28 13:33:58 -06:00
2013-07-03 16:07:39 -07:00
2013-09-23 21:44:16 -04:00
2013-11-15 09:32:23 +09:00
2013-11-15 09:32:21 +09:00
2013-11-09 00:16:29 -05:00
2013-05-01 16:36:22 +05:30
2013-07-15 11:25:00 +09:30
2013-05-07 18:38:27 -07:00
2013-04-29 18:28:40 -07:00
2013-08-26 20:15:23 +09:00
2013-06-17 16:38:57 -07:00
2013-08-22 22:13:54 -07:00
2013-10-01 16:19:08 +01:00
2013-09-29 18:27:03 -07:00
2013-10-16 18:40:57 -07:00
2013-06-13 17:51:04 -07:00
2013-06-17 16:38:57 -07:00
2013-10-28 20:07:50 -04:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-08-09 10:49:00 +02:00
2013-07-26 16:19:48 -07:00
2013-11-15 09:32:23 +09:00
2013-04-30 17:04:06 -07:00
2013-08-28 21:35:14 -07:00
2013-05-31 00:48:22 -07:00
2013-11-13 12:09:11 +09:00
2013-09-23 15:44:58 +09:30
2013-11-09 00:16:19 -05:00
2013-11-09 00:16:19 -05:00
2013-07-03 16:08:05 -07:00
2013-10-25 19:03:39 -04:00
2013-10-14 17:15:48 +02:00
2013-05-04 14:47:26 -04:00
2013-09-03 16:40:32 -04:00
2013-06-12 12:37:30 +01:00
2013-04-29 15:54:28 -07:00
2013-11-07 14:44:27 -07:00
2013-05-31 17:19:05 -07:00
2013-10-17 00:36:06 +02:00
2013-06-21 11:32:51 +02:00
2013-07-03 16:08:05 -07:00
2013-06-17 16:38:57 -07:00
2013-09-10 18:56:32 -04:00
2013-09-04 23:11:42 +03:00
2013-04-30 15:50:12 +05:30
2013-09-12 15:38:02 -07:00
2013-09-26 15:33:18 -07:00
2013-05-21 12:25:02 -05:00
2013-08-05 10:52:36 -06:00
2013-05-27 10:57:53 +09:00
2013-10-17 15:53:09 -04:00
2013-07-10 18:11:34 -07:00