• Steven Rostedt's avatar
    ftrace: fix race in function graph during fork · e8e1abe9
    Steven Rostedt authored
    Impact: graph tracer race/crash fix
    
    There is a nasy race in startup of a new process running the
    function graph tracer. In fork.c:
    
    	total_forks++;
    	spin_unlock(&current->sighand->siglock);
    	write_unlock_irq(&tasklist_lock);
    	ftrace_graph_init_task(p);
    	proc_fork_connector(p);
    	cgroup_post_fork(p);
    	return p;
    
    The new task is free to run as soon as the tasklist_lock is released.
    This is before the ftrace_graph_init_task. If the task does run
    it will be using the same ret_stack and curr_ret_stack as the parent.
    This will cause crashes that are difficult to debug.
    
    This patch moves the ftrace_graph_init_task to just after the alloc_pid
    code. This fixes the above race.
    Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    e8e1abe9
fork.c 41.2 KB