If kretprobe_find_ret_addr() fails to find the original return address,
it returns 0. Check for this case so that a reliable stacktrace won't
silently ignore it.

Signed-off-by: Mark Rutland <[email protected]>
Cc: Andrea della Porta <[email protected]>
Cc: Breno Leitao <[email protected]>
Cc: Catalin Marinas <[email protected]>
Cc: Josh Poimboeuf <[email protected]>
Cc: Miroslav Benes <[email protected]>
Cc: Petr Mladek <[email protected]>
Cc: Song Liu <[email protected]>
Cc: Will Deacon <[email protected]>
---
 arch/arm64/kernel/stacktrace.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
index 1d9d51d7627fd..f6494c0942144 100644
--- a/arch/arm64/kernel/stacktrace.c
+++ b/arch/arm64/kernel/stacktrace.c
@@ -152,6 +152,8 @@ kunwind_recover_return_address(struct kunwind_state *state)
                orig_pc = kretprobe_find_ret_addr(state->task,
                                                  (void *)state->common.fp,
                                                  &state->kr_cur);
+               if (!orig_pc)
+                       return -EINVAL;
                state->common.pc = orig_pc;
                state->flags.kretprobe = 1;
        }
-- 
2.30.2


Reply via email to