linux/kernel/trace
Steven Rostedt (VMware) 3d9622c12c tracing: Add barrier to trace_printk() buffer nesting modification
trace_printk() uses 4 buffers, one for each context (normal, softirq, irq
and NMI), such that it does not need to worry about one context preempting
the other. There's a nesting counter that gets incremented to figure out
which buffer to use. If the context gets preempted by another context which
calls trace_printk() it will increment the counter and use the next buffer,
and restore the counter when it is finished.

The problem is that gcc may optimize the modification of the buffer nesting
counter and it may not be incremented in memory before the buffer is used.
If this happens, and the context gets interrupted by another context, it
could pick the same buffer and corrupt the one that is being used.

Compiler barriers need to be added after the nesting variable is incremented
and before it is decremented to prevent usage of the context buffers by more
than one context at the same time.

Cc: Andy Lutomirski <luto@kernel.org>
Cc: stable@vger.kernel.org
Fixes: e2ace00117 ("tracing: Choose static tp_printk buffer by explicit nesting count")
Hat-tip-to: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
2017-09-05 11:54:33 -04:00
..
blktrace.c
bpf_trace.c bpf: fix bpf_trace_printk on 32 bit archs 2017-08-15 17:32:15 -07:00
ftrace.c ftrace: Fix memleak when unregistering dynamic ops when tracing disabled 2017-09-01 13:55:49 -04:00
Kconfig
Makefile
power-traces.c
ring_buffer.c ring-buffer: Have ring_buffer_alloc_read_page() return error on offline CPU 2017-08-02 14:23:02 -04:00
ring_buffer_benchmark.c ring-buffer: Have ring_buffer_alloc_read_page() return error on offline CPU 2017-08-02 14:23:02 -04:00
rpm-traces.c
trace.c tracing: Add barrier to trace_printk() buffer nesting modification 2017-09-05 11:54:33 -04:00
trace.h tracing: Only have rmmod clear buffers that its events were active in 2017-08-31 17:47:38 -04:00
trace_benchmark.c
trace_benchmark.h
trace_branch.c
trace_clock.c
trace_entries.h
trace_event_perf.c
trace_events.c tracing: Only have rmmod clear buffers that its events were active in 2017-08-31 17:47:38 -04:00
trace_events_filter.c tracing: Fix freeing of filter in create_filter() when set_str is false 2017-08-24 10:07:38 -04:00
trace_events_filter_test.h
trace_events_hist.c
trace_events_trigger.c
trace_export.c
trace_functions.c
trace_functions_graph.c
trace_hwlat.c
trace_irqsoff.c
trace_kdb.c
trace_kprobe.c A few more minor updates: 2017-07-13 13:17:19 -07:00
trace_mmiotrace.c
trace_nop.c
trace_output.c
trace_output.h
trace_printk.c
trace_probe.c
trace_probe.h
trace_sched_switch.c
trace_sched_wakeup.c
trace_selftest.c ftrace: Fix selftest goto location on error 2017-09-01 12:04:09 -04:00
trace_selftest_dynamic.c
trace_seq.c
trace_stack.c tracing: Do note expose stack_trace_filter without DYNAMIC_FTRACE 2017-07-11 19:21:04 -04:00
trace_stat.c
trace_stat.h
trace_syscalls.c
trace_uprobe.c
tracing_map.c tracing: Fix kmemleak in tracing_map_array_free() 2017-08-24 10:05:51 -04:00
tracing_map.h