Jan Kara
473d7f5ed7
blktrace: Protect q->blk_trace with RCU
...
commit c780e86dd48ef6467a1146cf7d0fe1e05a635039 upstream.
KASAN is reporting that __blk_add_trace() has a use-after-free issue
when accessing q->blk_trace. Indeed the switching of block tracing (and
thus eventual freeing of q->blk_trace) is completely unsynchronized with
the currently running tracing and thus it can happen that the blk_trace
structure is being freed just while __blk_add_trace() works on it.
Protect accesses to q->blk_trace by RCU during tracing and make sure we
wait for the end of RCU grace period when shutting down tracing. Luckily
that is rare enough event that we can afford that. Note that postponing
the freeing of blk_trace to an RCU callback should better be avoided as
it could have unexpected user visible side-effects as debugfs files
would be still existing for a short while block tracing has been shut
down.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=205711
CC: stable@vger.kernel.org
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reported-by: Tristan Madani <tristmd@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 4.19: adjust context]
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-04-29 16:31:17 +02:00
..
blktrace.c
blktrace: Protect q->blk_trace with RCU
2020-04-29 16:31:17 +02:00
bpf_trace.c
bpf: fix nested bpf tracepoints with per-cpu data
2019-07-03 13:14:48 +02:00
ftrace.c
ftrace: fpid_next() should increase position index
2020-02-24 08:34:52 +01:00
Kconfig
Masami found an off by one bug in the code that keeps "notrace" functions
2018-08-23 13:07:00 -07:00
Makefile
tracing: Allow gcov profiling on only ftrace subsystem
2018-08-21 09:11:49 -04:00
power-traces.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
preemptirq_delay_test.c
tracing: Use trace_clock_local() for looping in preemptirq_delay_test.c
2018-10-17 15:35:33 -04:00
ring_buffer.c
trace: Fix preempt_enable_no_resched() abuse
2019-05-02 09:58:54 +02:00
ring_buffer_benchmark.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
rpm-traces.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
trace.c
tracing: Disable trace_printk() on post poned tests
2020-03-05 16:42:18 +01:00
trace.h
ftrace: Protect ftrace_graph_hash with ftrace_sync
2020-02-11 04:34:05 -08:00
trace_benchmark.c
rcu: Rename cond_resched_rcu_qs() to cond_resched_tasks_rcu_qs()
2018-05-15 10:27:29 -07:00
trace_benchmark.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_branch.c
Revert "x86/uaccess, ftrace: Fix ftrace_likely_update() vs. SMAP"
2019-07-03 13:14:41 +02:00
trace_clock.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_entries.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_event_perf.c
tracing: Fix race in perf_trace_buf initialization
2019-10-29 09:20:03 +01:00
trace_events.c
tracing: Fix lock inversion in trace_event_enable_tgid_record()
2020-01-09 10:19:02 +01:00
trace_events_filter.c
tracing: Avoid memory leak in process_system_preds()
2020-01-09 10:19:02 +01:00
trace_events_filter_test.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_events_hist.c
tracing: Fix histogram code when expression has same var as value
2020-01-29 16:43:23 +01:00
trace_events_trigger.c
tracing: Fix the race between registering 'snapshot' event trigger and triggering 'snapshot' operation
2020-04-21 09:03:09 +02:00
trace_export.c
tracing: Add trigger file for trace_markers tracefs/ftrace/print
2018-05-29 08:28:53 -04:00
trace_functions.c
tracing: Update stack trace skipping for ORC unwinder
2018-01-23 15:57:00 -05:00
trace_functions_graph.c
tracing/fgraph: Fix set_graph_function from showing interrupts
2018-12-08 12:59:07 +01:00
trace_hwlat.c
tracing/hwlat: Don't ignore outer-loop duration when calculating max_latency
2019-10-17 13:45:39 -07:00
trace_irqsoff.c
tracing/fgraph: Fix set_graph_function from showing interrupts
2018-12-08 12:59:07 +01:00
trace_kdb.c
tracing: Silence GCC 9 array bounds warning
2019-06-25 11:35:52 +08:00
trace_kprobe.c
ftrace/kprobe: Show the maxactive number on kprobe_events
2020-04-17 10:48:55 +02:00
trace_kprobe_selftest.c
selftest/ftrace: Move kprobe selftest function to separate compile unit
2018-07-30 18:41:04 -04:00
trace_kprobe_selftest.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_mmiotrace.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
trace_nop.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
trace_output.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_output.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_preemptirq.c
tracing: More reverting of "tracing: Centralize preemptirq tracepoints and unify their usage"
2018-08-10 15:12:00 -04:00
trace_printk.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_probe.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_probe.h
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_sched_switch.c
tracing: Fix sched switch start/stop refcount racy updates
2020-02-11 04:33:55 -08:00
trace_sched_wakeup.c
kernel/trace: Fix do not unregister tracepoints when register sched_migrate_task fail
2020-01-14 20:06:59 +01:00
trace_selftest.c
Tracing updates for 4.15:
2017-11-17 14:58:01 -08:00
trace_selftest_dynamic.c
ftrace: Mark function tracer test functions noinline/noclone
2018-01-23 15:57:29 -05:00
trace_seq.c
tracing: Add SPDX License format tags to tracing files
2018-08-16 19:08:06 -04:00
trace_stack.c
tracing: Have stack tracer compile when MCOUNT_INSN_SIZE is not defined
2020-01-14 20:06:59 +01:00
trace_stat.c
tracing: Fix very unlikely race of registering two stat tracers
2020-02-24 08:34:39 +01:00
trace_stat.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00
trace_syscalls.c
Tracing updates for 4.15:
2017-11-17 14:58:01 -08:00
trace_uprobe.c
tracing/uprobes: Fix output for multiple string arguments
2019-02-20 10:25:48 +01:00
tracing_map.c
tracing: Have the histogram compare functions convert to u64 first
2020-01-09 10:19:02 +01:00
tracing_map.h
tracing: Fix SPDX format headers to use C++ style comments
2018-08-16 19:08:06 -04:00