• S
    function-graph: move initialization of new tasks up in fork · f7e8b616
    Steven Rostedt 提交于
    When the function graph tracer is enabled, all new tasks must allocate
    a ret_stack to place the return address of functions. This is because
    the function graph tracer will replace the real return address with a
    call to the tracing of the exit function.
    
    This initialization happens in fork, but it happens too late. If fork
    fails, then it will call free_task and that calls the freeing of this
    ret_stack. But before initialization happens, the new (failed) task
    points to its parents ret_stack. If a fork failure happens during
    the function trace, it would be catastrophic for the parent.
    
    Also, there's no need to call ftrace_graph_exit_task from fork, since
    it is called by free_task which fork calls on failure.
    
    [ Impact: prevent crash during failed fork running function graph tracer ]
    Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
    f7e8b616
fork.c 41.4 KB