diff options
author | Mathieu Desnoyers <[email protected]> | 2019-08-17 10:12:08 -0400 |
---|---|---|
committer | Steven Rostedt (VMware) <[email protected]> | 2020-01-30 09:46:10 -0500 |
commit | 64ae572bc7d0060429e40e1c8d803ce5eb31a0d6 (patch) | |
tree | 411822258e8207664a919baee588d43f081fe4ce | |
parent | 5c3469cb899abe998299aafb8f16f325d62d2d68 (diff) |
tracing: Fix sched switch start/stop refcount racy updates
Reading the sched_cmdline_ref and sched_tgid_ref initial state within
tracing_start_sched_switch without holding the sched_register_mutex is
racy against concurrent updates, which can lead to tracepoint probes
being registered more than once (and thus trigger warnings within
tracepoint.c).
[ May be the fix for this bug ]
Link: https://lore.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Cc: [email protected]
CC: Steven Rostedt (VMware) <[email protected]>
CC: Joel Fernandes (Google) <[email protected]>
CC: Peter Zijlstra <[email protected]>
CC: Thomas Gleixner <[email protected]>
CC: Paul E. McKenney <[email protected]>
Reported-by: [email protected]
Fixes: d914ba37d7145 ("tracing: Add support for recording tgid of tasks")
Signed-off-by: Mathieu Desnoyers <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
-rw-r--r-- | kernel/trace/trace_sched_switch.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c index e288168661e1..e304196d7c28 100644 --- a/kernel/trace/trace_sched_switch.c +++ b/kernel/trace/trace_sched_switch.c @@ -89,8 +89,10 @@ static void tracing_sched_unregister(void) static void tracing_start_sched_switch(int ops) { - bool sched_register = (!sched_cmdline_ref && !sched_tgid_ref); + bool sched_register; + mutex_lock(&sched_register_mutex); + sched_register = (!sched_cmdline_ref && !sched_tgid_ref); switch (ops) { case RECORD_CMDLINE: |