lkml.org 
[lkml]   [2020]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 05/46] s390/ftrace: save traced function caller
    Date
    From: Vasily Gorbik <gor@linux.ibm.com>

    [ Upstream commit b4adfe55915d8363e244e42386d69567db1719b9 ]

    A typical backtrace acquired from ftraced function currently looks like
    the following (e.g. for "path_openat"):

    arch_stack_walk+0x15c/0x2d8
    stack_trace_save+0x50/0x68
    stack_trace_call+0x15a/0x3b8
    ftrace_graph_caller+0x0/0x1c
    0x3e0007e3c98 <- ftraced function caller (should be do_filp_open+0x7c/0xe8)
    do_open_execat+0x70/0x1b8
    __do_execve_file.isra.0+0x7d8/0x860
    __s390x_sys_execve+0x56/0x68
    system_call+0xdc/0x2d8

    Note random "0x3e0007e3c98" stack value as ftraced function caller. This
    value causes either imprecise unwinder result or unwinding failure.
    That "0x3e0007e3c98" comes from r14 of ftraced function stack frame, which
    it haven't had a chance to initialize since the very first instruction
    calls ftrace code ("ftrace_caller"). (ftraced function might never
    save r14 as well). Nevertheless according to s390 ABI any function
    is called with stack frame allocated for it and r14 contains return
    address. "ftrace_caller" itself is called with "brasl %r0,ftrace_caller".
    So, to fix this issue simply always save traced function caller onto
    ftraced function stack frame.

    Reported-by: Sven Schnelle <svens@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/s390/kernel/mcount.S | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
    index 0cfd5a83a1da..151f001a90ff 100644
    --- a/arch/s390/kernel/mcount.S
    +++ b/arch/s390/kernel/mcount.S
    @@ -40,6 +40,7 @@ EXPORT_SYMBOL(_mcount)
    ENTRY(ftrace_caller)
    .globl ftrace_regs_caller
    .set ftrace_regs_caller,ftrace_caller
    + stg %r14,(__SF_GPRS+8*8)(%r15) # save traced function caller
    lgr %r1,%r15
    #ifndef CC_USING_HOTPATCH
    aghi %r0,MCOUNT_RETURN_FIXUP
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-09 20:20    [W:5.662 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site