lkml.org 
[lkml]   [2019]   [Aug]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 18/25] arm64: unwind: Prohibit probing on return_address()
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    [ Upstream commit ee07b93e7721ccd5d5b9fa6f0c10cb3fe2f1f4f9 ]

    Prohibit probing on return_address() and subroutines which
    is called from return_address(), since the it is invoked from
    trace_hardirqs_off() which is also kprobe blacklisted.

    Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/kernel/return_address.c | 3 +++
    arch/arm64/kernel/stacktrace.c | 3 +++
    2 files changed, 6 insertions(+)

    diff --git a/arch/arm64/kernel/return_address.c b/arch/arm64/kernel/return_address.c
    index 933adbc0f654d..0311fe52c8ffb 100644
    --- a/arch/arm64/kernel/return_address.c
    +++ b/arch/arm64/kernel/return_address.c
    @@ -11,6 +11,7 @@

    #include <linux/export.h>
    #include <linux/ftrace.h>
    +#include <linux/kprobes.h>

    #include <asm/stack_pointer.h>
    #include <asm/stacktrace.h>
    @@ -32,6 +33,7 @@ static int save_return_addr(struct stackframe *frame, void *d)
    return 0;
    }
    }
    +NOKPROBE_SYMBOL(save_return_addr);

    void *return_address(unsigned int level)
    {
    @@ -55,3 +57,4 @@ void *return_address(unsigned int level)
    return NULL;
    }
    EXPORT_SYMBOL_GPL(return_address);
    +NOKPROBE_SYMBOL(return_address);
    diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
    index d5718a060672e..2ae7630d685b5 100644
    --- a/arch/arm64/kernel/stacktrace.c
    +++ b/arch/arm64/kernel/stacktrace.c
    @@ -18,6 +18,7 @@
    #include <linux/kernel.h>
    #include <linux/export.h>
    #include <linux/ftrace.h>
    +#include <linux/kprobes.h>
    #include <linux/sched.h>
    #include <linux/sched/debug.h>
    #include <linux/sched/task_stack.h>
    @@ -85,6 +86,7 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame)

    return 0;
    }
    +NOKPROBE_SYMBOL(unwind_frame);

    void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
    int (*fn)(struct stackframe *, void *), void *data)
    @@ -99,6 +101,7 @@ void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
    break;
    }
    }
    +NOKPROBE_SYMBOL(walk_stackframe);

    #ifdef CONFIG_STACKTRACE
    struct stack_trace_data {
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-06 23:56    [W:9.121 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site