Current arch_stack_walk_user() checks `if (fp == frame.next_fp)` to prevent infinite loop by self reference but it's not enogh for circular reference.
Once we find a lack of return address, there is no need to continue loop, so let's break out. Fixes: 02b67518e2b1 ("tracing: add support for userspace stacktraces in tracing/iter_ctrl") Signed-off-by: Eiichi Tsukata <de...@etsukata.com> --- arch/x86/kernel/stacktrace.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 2abf27d7df6b..b1a1f4b4c943 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c @@ -129,11 +129,8 @@ void arch_stack_walk_user(stack_trace_consume_fn consume_entry, void *cookie, break; if ((unsigned long)fp < regs->sp) break; - if (frame.ret_addr) { - if (!consume_entry(cookie, frame.ret_addr, false)) - return; - } - if (fp == frame.next_fp) + if (!frame.ret_addr || + !consume_entry(cookie, frame.ret_addr, false)) break; fp = frame.next_fp; } -- 2.21.0