linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Xi Ruoyao <xry111@xry111.site>
To: Tiezhu Yang <yangtiezhu@loongson.cn>,
	Huacai Chen <chenhuacai@kernel.org>,
	WANG Xuerui <kernel@xen0n.name>
Cc: Guenter Roeck <linux@roeck-us.net>,
	loongarch@lists.linux.dev, linux-kernel@vger.kernel.org,
	loongson-kernel@lists.loongnix.cn
Subject: Re: [PATCH] LoongArch: Check unwind_error() in arch_stack_walk()
Date: Tue, 21 Mar 2023 20:35:34 +0800	[thread overview]
Message-ID: <253a5dfcb7e41e44d15232e1891e7ea9d39dc953.camel@xry111.site> (raw)
In-Reply-To: <1679380154-20308-1-git-send-email-yangtiezhu@loongson.cn>

On Tue, 2023-03-21 at 14:29 +0800, Tiezhu Yang wrote:
> We can see the following messages with CONFIG_PROVE_LOCKING=y on
> LoongArch:
> 
>   BUG: MAX_STACK_TRACE_ENTRIES too low!
>   turning off the locking correctness validator.
> 
> This is because stack_trace_save() returns a big value after call
> arch_stack_walk(), here is the call trace:
> 
>   save_trace()
>     stack_trace_save()
>       arch_stack_walk()
>         stack_trace_consume_entry()
> 
> arch_stack_walk() should return immediately if unwind_next_frame()
> failed, no need to do the useless loops to increase the value of
> c->len in stack_trace_consume_entry(), then we can fix the above
> problem.
> 
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Link: https://lore.kernel.org/all/8a44ad71-68d2-4926-892f-72bfc7a67e2a@roeck-us.net/
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>

The fix makes sense, but I'm asking the same question again (sorry if
it's noisy): should we Cc stable@vger.kernel.org and/or make a PR for
6.3?

To me a bug fixes should be backported into all stable branches affected
by the bug, unless there is some serious difficulty.  As 6.3 release
will work on launched 3A5000 boards out-of-box, people may want to stop
staying on the leading edge and use a LTS/stable release series. We
can't just say (or behave like) "we don't backport, please use latest
mainline" IMO :).

> ---
>  arch/loongarch/kernel/stacktrace.c      | 3 ++-
>  arch/loongarch/kernel/unwind.c          | 1 +
>  arch/loongarch/kernel/unwind_prologue.c | 4 +++-
>  3 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/loongarch/kernel/stacktrace.c b/arch/loongarch/kernel/stacktrace.c
> index 3a690f9..7c15ba5 100644
> --- a/arch/loongarch/kernel/stacktrace.c
> +++ b/arch/loongarch/kernel/stacktrace.c
> @@ -30,7 +30,8 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
>  
>         regs->regs[1] = 0;
>         for (unwind_start(&state, task, regs);
> -             !unwind_done(&state); unwind_next_frame(&state)) {
> +            !unwind_done(&state) && !unwind_error(&state);
> +            unwind_next_frame(&state)) {
>                 addr = unwind_get_return_address(&state);
>                 if (!addr || !consume_entry(cookie, addr))
>                         break;
> diff --git a/arch/loongarch/kernel/unwind.c b/arch/loongarch/kernel/unwind.c
> index a463d69..ba324ba 100644
> --- a/arch/loongarch/kernel/unwind.c
> +++ b/arch/loongarch/kernel/unwind.c
> @@ -28,5 +28,6 @@ bool default_next_frame(struct unwind_state *state)
>  
>         } while (!get_stack_info(state->sp, state->task, info));
>  
> +       state->error = true;
>         return false;
>  }
> diff --git a/arch/loongarch/kernel/unwind_prologue.c b/arch/loongarch/kernel/unwind_prologue.c
> index 9095fde..55afc27 100644
> --- a/arch/loongarch/kernel/unwind_prologue.c
> +++ b/arch/loongarch/kernel/unwind_prologue.c
> @@ -211,7 +211,7 @@ static bool next_frame(struct unwind_state *state)
>                         pc = regs->csr_era;
>  
>                         if (user_mode(regs) || !__kernel_text_address(pc))
> -                               return false;
> +                               goto out;
>  
>                         state->first = true;
>                         state->pc = pc;
> @@ -226,6 +226,8 @@ static bool next_frame(struct unwind_state *state)
>  
>         } while (!get_stack_info(state->sp, state->task, info));
>  
> +out:
> +       state->error = true;
>         return false;
>  }
>  

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

  reply	other threads:[~2023-03-21 12:35 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21  6:29 [PATCH] LoongArch: Check unwind_error() in arch_stack_walk() Tiezhu Yang
2023-03-21 12:35 ` Xi Ruoyao [this message]
2023-03-21 14:25   ` Guenter Roeck
2023-03-22  0:50     ` Huacai Chen
2023-03-22  2:20       ` Guenter Roeck
2023-03-23  1:30         ` Huacai Chen

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=253a5dfcb7e41e44d15232e1891e7ea9d39dc953.camel@xry111.site \
    --to=xry111@xry111.site \
    --cc=chenhuacai@kernel.org \
    --cc=kernel@xen0n.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=loongarch@lists.linux.dev \
    --cc=loongson-kernel@lists.loongnix.cn \
    --cc=yangtiezhu@loongson.cn \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).