• F
    tracing/ftrace: fix a race condition in sched_switch tracer · 07695fa0
    Frederic Weisbecker 提交于
    Impact: fix race condition in sched_switch tracer
    
    This patch fixes a race condition in the sched_switch tracer. If
    several tasks (IE: concurrent initcalls) are playing with
    tracing_start_cmdline_record() and tracing_stop_cmdline_record(), the
    following situation could happen:
    
    _ Task A and B are using the same tracepoint probe. Task A holds it.
      Task B is sleeping and doesn't hold it.
    
    _ Task A frees the sched tracer, then sched_ref is decremented to 0.
    
    _ Task A is preempted and hadn't yet unregistered its tracepoint
      probe, then B runs.
    
    _ B increments sched_ref, sees it's 1 and then guess it has to
      register its probe. But it has not been freed by task A.
    
    _ A lot of bad things can happen after that...
    Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    07695fa0
trace_sched_switch.c 4.4 KB