]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Aug 2025 16:30:36 +0000 (18:30 +0200)
[ Upstream commit beecfd6a88a675e20987e70ec532ba734b230fa4 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/arm64/kernel/stacktrace.c

index 2729faaee4b4c20884f5f54289e1f5afa871c2c9..1d60a08a21843904af22dcbe11481d3a7ba04b39 100644 (file)
@@ -123,6 +123,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;
        }
 #endif /* CONFIG_KRETPROBES */