• Lai Jiangshan's avatar
    tracing: Fix circular dead lock in stack trace · 4f48f8b7
    Lai Jiangshan authored
    When we cat <debugfs>/tracing/stack_trace, we may cause circular lock:
         seq_printf(), vsnprintf() .... /* they are all trace-able,
           when they are traced, max_stack_lock may be required again. */
    The following script can trigger this circular dead lock very easy:
    echo 1 > /proc/sys/kernel/stack_tracer_enabled
    mount -t debugfs xxx /mnt > /dev/null 2>&1
    # make check_stack() zealous to require max_stack_lock
    for ((; ;))
    	echo 1 > /mnt/tracing/stack_max_size
    ) &
    for ((; ;))
    	cat /mnt/tracing/stack_trace > /dev/null
    To fix this bug, we increase the percpu trace_active before
    require the lock.
    Reported-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    LKML-Reference: <4B67D4F9.9080905@cn.fujitsu.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
trace_stack.c 7.7 KB