• Sven Schnelle's avatar
    s390/ftrace: fix endless recursion in function_graph tracer · 6feeee8e
    Sven Schnelle authored
    The following sequence triggers a kernel stack overflow on s390x:
    
    mount -t tracefs tracefs /sys/kernel/tracing
    cd /sys/kernel/tracing
    echo function_graph > current_tracer
    [crash]
    
    This is because preempt_count_{add,sub} are in the list of traced
    functions, which can be demonstrated by:
    
    echo preempt_count_add >set_ftrace_filter
    echo function_graph > current_tracer
    [crash]
    
    The stack overflow happens because get_tod_clock_monotonic() gets called
    by ftrace but itself calls preempt_{disable,enable}(), which leads to a
    endless recursion. Fix this by using preempt_{disable,enable}_notrace().
    
    Fixes: 01162068 ("s390/time: ensure get_clock_monotonic() returns monotonic values")
    Signed-off-by: default avatarSven Schnelle <svens@linux.ibm.com>
    Reviewed-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    6feeee8e
timex.h 6.09 KB