]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm64: stacktrace: Check kretprobe_find_ret_addr() return value
authorMark Rutland <mark.rutland@arm.com>
Wed, 21 May 2025 11:09:59 +0000 (12:09 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 20 Jun 2025 12:10:09 +0000 (13:10 +0100)
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 <mark.rutland@arm.com>
Cc: Andrea della Porta <andrea.porta@suse.com>
Cc: Breno Leitao <leitao@debian.org>
Cc: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: Miroslav Benes <mbenes@suse.cz>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Song Liu <song@kernel.org>
Cc: Will Deacon <will@kernel.org>
Reviewed-and-tested-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20250521111000.2237470-2-mark.rutland@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/stacktrace.c

index 1d9d51d7627fd48257fe7d7be00093d884041055..f6494c09421442e411c04e74305037fab78222f6 100644 (file)
@@ -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;
        }