All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Shuai Xue" <xueshuai@linux.alibaba.com>,
	palmer@dabbelt.com, pjw@kernel.org, aou@eecs.berkeley.edu
Cc: alex@ghiti.fr, oleg@redhat.com, rostedt@goodmis.org,
	mhiramat@kernel.org, mark.rutland@arm.com, peterz@infradead.org,
	mingo@redhat.com, acme@kernel.org, namhyung@kernel.org,
	alexander.shishkin@linux.intel.com, jolsa@kernel.org,
	irogers@google.com, adrian.hunter@intel.com,
	james.clark@linaro.org, jpoimboe@kernel.org, jikos@kernel.org,
	mbenes@suse.cz, pmladek@suse.com, joe.lawrence@redhat.com,
	shuah@kernel.org, mpdesouza@suse.com, martin@kaiser.cx,
	kmehltretter@gmail.com, oliver.yang@linux.alibaba.com,
	zhuo.song@linux.alibaba.com, jkchen@linux.alibaba.com,
	linux-trace-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, live-patching@vger.kernel.org
Subject: Re: [PATCH v7 01/10] riscv: stacktrace: do not report the walker's own frame from arch_stack_walk()
Date: Tue, 10 Nov 2026 01:52:46 +0000	[thread overview]
Message-ID: <sashiko-outbox-206002@kernel.org> (raw)
In-Reply-To: <20261110013750.36800-2-xueshuai@linux.alibaba.com>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] riscv: stacktrace: off-by-one frame unwind in
  __walk_stackframe() for !FRAME_POINTER
--

commit 0ad8b77869cf04ae7e9c217cd0f43219461f68f7
Author: Karl Mehltretter <kmehltretter@gmail.com>

riscv: stacktrace: do not report the walker's own frame from arch_stack_walk()

This commit moves the stack walker into an always-inlined __walk_stackframe()
helper called directly from arch_stack_walk() and reduces the skip count in
return_address() from level + 3 to level + 2.

Link: https://lore.kernel.org/r/20261010132712.46931-1-kmehltretter@gmail.com

> diff --git a/arch/riscv/kernel/return_address.c b/arch/riscv/kernel/return_address.c
> index c8115ec8fb304..4da1cfd249d3d 100644
> --- a/arch/riscv/kernel/return_address.c
> +++ b/arch/riscv/kernel/return_address.c
> @@ -33,7 +33,7 @@ noinline void *return_address(unsigned int level)
>  {
>  	struct return_address_data data;
>  
> -	data.level = level + 3;
> +	data.level = level + 2;
>  	data.addr = NULL;
>  
>  	arch_stack_walk(save_return_addr, &data, current, NULL);
> diff --git a/arch/riscv/kernel/stacktrace.c b/arch/riscv/kernel/stacktrace.c
> index c7555447149bf..28c5744889bac 100644
> --- a/arch/riscv/kernel/stacktrace.c
> +++ b/arch/riscv/kernel/stacktrace.c

[ ... ]

> @@ -102,10 +111,18 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
>  	}
>  }
>  
> +void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
> +			     bool (*fn)(void *, unsigned long), void *arg)
> +{
> +	__walk_stackframe(task, regs, fn, arg);
> +}
> +
>  #else /* !CONFIG_FRAME_POINTER */
>  
> -void notrace walk_stackframe(struct task_struct *task,
> -	struct pt_regs *regs, bool (*fn)(void *, unsigned long), void *arg)
> +static __always_inline void __walk_stackframe(struct task_struct *task,
> +					      struct pt_regs *regs,
> +					      bool (*fn)(void *, unsigned long),
> +					      void *arg)
>  {
>  	unsigned long sp, pc;
>  	unsigned long *ksp;

[Severity: Medium]
Does the !CONFIG_FRAME_POINTER version of __walk_stackframe() still report
walk_stackframe as its first entry before scanning the stack?

arch/riscv/kernel/stacktrace.c:__walk_stackframe() {
    ...
	} else if (task == NULL || task == current) {
		sp = current_stack_pointer;
		pc = (unsigned long)walk_stackframe;
	} else {
    ...
	while (!kstack_end(ksp)) {
		if (__kernel_text_address(pc) && unlikely(!fn(arg, pc)))
			break;
		pc = READ_ONCE_NOCHECK(*ksp++);
	}
}

Unlike the CONFIG_FRAME_POINTER version, which initializes level = -1 so the
initial walk_stackframe placeholder is skipped, the !CONFIG_FRAME_POINTER
loop passes pc = (unsigned long)walk_stackframe directly to fn() on the first
iteration before reading arch_stack_walk()'s saved return address from *ksp++.
As a result, when CONFIG_FRAME_POINTER is disabled, stack_trace_save() still
starts one frame too early, and reducing data.level from level + 3 to
level + 2 in return_address() causes return_address(),
ftrace_return_address(), and CALLER_ADDRx to stop one caller too early.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261110013750.36800-1-xueshuai@linux.alibaba.com?part=1

  reply	other threads:[~2026-11-10  1:52 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-14  9:26 [PATCH v6 0/7] riscv: Add reliable stack unwinding for livepatch Shuai Xue
2026-09-14  9:26 ` Shuai Xue
2026-09-14  9:26 ` [PATCH v6 1/7] riscv: stacktrace: Add frame record metadata Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:40   ` sashiko-bot
2026-09-14  9:26 ` [PATCH v6 2/7] riscv: stacktrace: disable KASAN and KCOV instrumentation for stacktrace.o Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:32   ` sashiko-bot
2026-09-14  9:26 ` [PATCH v6 3/7] riscv: ftrace: always preserve s0 in dynamic ftrace register frame Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:32   ` sashiko-bot
2026-09-14  9:26 ` [PATCH v6 4/7] riscv: stacktrace: introduce stack-bound tracking helpers Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:33   ` sashiko-bot
2026-09-14  9:26 ` [PATCH v6 5/7] riscv: stacktrace: switch to frame-pointer based unwinder Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:39   ` sashiko-bot
2026-10-09 18:59   ` Karl Mehltretter
2026-10-09 18:59     ` Karl Mehltretter
2026-10-10  3:38     ` Shuai Xue
2026-10-10  3:38       ` Shuai Xue
2026-10-13 20:18   ` Martin Kaiser
2026-10-13 20:18     ` Martin Kaiser
2026-10-14 13:09     ` Shuai Xue
2026-10-14 13:09       ` Shuai Xue
2026-09-14  9:26 ` [PATCH v6 6/7] riscv: Kconfig: enable HAVE_RELIABLE_STACKTRACE and HAVE_LIVEPATCH Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:38   ` sashiko-bot
2026-09-14  9:26 ` [PATCH v6 7/7] selftests/livepatch: Add RISC-V syscall wrapper prefix Shuai Xue
2026-09-14  9:26   ` Shuai Xue
2026-09-14  9:38   ` sashiko-bot
2026-09-29  7:28 ` [PATCH v6 0/7] riscv: Add reliable stack unwinding for livepatch Martin Kaiser
2026-09-29  7:28   ` Martin Kaiser
2026-10-08 11:42   ` Shuai Xue
2026-10-08 11:42     ` Shuai Xue
2026-10-12  8:44     ` Martin Kaiser
2026-10-12  8:44       ` Martin Kaiser
2026-11-10  1:37 ` [PATCH v7 00/10] " Shuai Xue
2026-11-10  1:37   ` Shuai Xue
2026-11-10  1:37   ` [PATCH v7 01/10] riscv: stacktrace: do not report the walker's own frame from arch_stack_walk() Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:52     ` sashiko-bot [this message]
2026-11-10  1:37   ` [PATCH v7 02/10] riscv: Add KUnit test for stack trace start frames Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:50     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 03/10] riscv: ftrace: use the frame pointer as the function graph return-address cookie Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:56     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 04/10] riscv: stacktrace: Add frame record metadata Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:54     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 05/10] riscv: stacktrace: disable KASAN and KCOV instrumentation for stacktrace.o Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:42     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 06/10] riscv: ftrace: always preserve s0 in dynamic ftrace register frame Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:42     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 07/10] riscv: stacktrace: introduce stack-bound tracking helpers Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:47     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 08/10] riscv: stacktrace: switch to frame-pointer based unwinder Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  2:20     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 09/10] riscv: Kconfig: enable HAVE_RELIABLE_STACKTRACE and HAVE_LIVEPATCH Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  2:10     ` sashiko-bot
2026-11-10  1:37   ` [PATCH v7 10/10] selftests/livepatch: Add RISC-V syscall wrapper prefix Shuai Xue
2026-11-10  1:37     ` Shuai Xue
2026-11-10  1:48     ` sashiko-bot
2026-11-10  6:35   ` [PATCH v7 00/10] riscv: Add reliable stack unwinding for livepatch Karl Mehltretter
2026-11-10  6:35     ` Karl Mehltretter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-206002@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alex@ghiti.fr \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jikos@kernel.org \
    --cc=jkchen@linux.alibaba.com \
    --cc=joe.lawrence@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=jpoimboe@kernel.org \
    --cc=kmehltretter@gmail.com \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=martin@kaiser.cx \
    --cc=mbenes@suse.cz \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mpdesouza@suse.com \
    --cc=namhyung@kernel.org \
    --cc=oleg@redhat.com \
    --cc=oliver.yang@linux.alibaba.com \
    --cc=palmer@dabbelt.com \
    --cc=peterz@infradead.org \
    --cc=pjw@kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=shuah@kernel.org \
    --cc=xueshuai@linux.alibaba.com \
    --cc=zhuo.song@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.