From: Ard Biesheuvel <ardb@kernel.org>
To: "Russell King (Oracle)" <linux@armlinux.org.uk>
Cc: David Laight <David.Laight@aculab.com>,
Jiangfeng Xiao <xiaojiangfeng@huawei.com>,
"arnd@arndb.de" <arnd@arndb.de>,
"keescook@chromium.org" <keescook@chromium.org>,
"haibo.li@mediatek.com" <haibo.li@mediatek.com>,
"angelogioacchino.delregno@collabora.com"
<angelogioacchino.delregno@collabora.com>,
"amergnat@baylibre.com" <amergnat@baylibre.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"douzhaolei@huawei.com" <douzhaolei@huawei.com>,
"gustavoars@kernel.org" <gustavoars@kernel.org>,
"jpoimboe@kernel.org" <jpoimboe@kernel.org>,
"kepler.chenxin@huawei.com" <kepler.chenxin@huawei.com>,
"kirill.shutemov@linux.intel.com"
<kirill.shutemov@linux.intel.com>,
"linux-hardening@vger.kernel.org"
<linux-hardening@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"nixiaoming@huawei.com" <nixiaoming@huawei.com>,
"peterz@infradead.org" <peterz@infradead.org>,
"wangbing6@huawei.com" <wangbing6@huawei.com>,
"wangfangpeng1@huawei.com" <wangfangpeng1@huawei.com>,
"jannh@google.com" <jannh@google.com>,
"willy@infradead.org" <willy@infradead.org>
Subject: Re: [PATCH v2] ARM: unwind: improve unwinders for noreturn case
Date: Thu, 21 Mar 2024 23:43:41 +0100 [thread overview]
Message-ID: <CAMj1kXG2EGvgGuV-K7h5qDVJeLMd5hkq8GzigzCRzh9Z8cgyWw@mail.gmail.com> (raw)
In-Reply-To: <ZfwYx/8k8FVONg6+@shell.armlinux.org.uk>
On Thu, 21 Mar 2024 at 12:24, Russell King (Oracle)
<linux@armlinux.org.uk> wrote:
>
> On Thu, Mar 21, 2024 at 10:22:30AM +0000, David Laight wrote:
> > How aggressively does the compiler optimise 'noreturn' functions?
>
> I've seen cases where the compiler emits a BL instruction as the very
> last thing in the function, and nothing after it.
>
> This is where the problem lies - because the link register value
> created by the BL instruction will point to the instruction after the
> BL which will _not_ part of the function that invoked the BL. That
> will probably cause issues for the ELF unwinder, which means this
> issue probably goes beyond _just_ printing the function name.
>
> I have vague memories that Ard has been involved in the unwinder,
> maybe he could comment on this problem? Maybe we need the unwinder
> itself to do the correction? I also wonder whether we should only
> do the correction if we detect that we're pointing at the first
> instruction of a function, and the previous instruction in the
> text segment was a BL.
>
First of all, I consider this to be a defect in the toolchain. Given
that the compiler knows that the BL is not going to return, it should
simply emit a BRK instruction or similar after it. This would catch
inadvertent returns as well as eliminate this kind of confusion.
The ARM unwind format is not really suitable for asynchronous
unwinding, so unwinding across exceptions is always going to be hit
and miss. Also, we should consider what the unwind information
actually tells us: for debugging, it is useful to understand where we
came from, i.e., how we ended up in the situation where the backtrace
was triggered, but what it actually tells us is where we would have
gone next had execution not been interrupted. The latter notion is
important for things like reliable stacktrace and live patch, which
need to know where a task might be returning to.
Returning to the first instruction of a function is unusual, but in
the light of the above, I don't think we can assume that it means that
the call originated from the preceding function, even when it ends in
a BL instruction (although it would be highly likely, of course). The
tracers and other instrumentation might insert probes in the return
path, and I suspect that this may result in a similar situation in
some cases.
Given that this particular issue would just disappear if the compiler
would just insert a BRK after the BL, I'd prefer to explore first
whether we can get this fixed on the compiler side.
next prev parent reply other threads:[~2024-03-21 22:44 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-04 1:39 [PATCH] usercopy: delete __noreturn from usercopy_abort Jiangfeng Xiao
2024-03-04 15:15 ` Jann Horn
2024-03-04 17:40 ` Kees Cook
2024-03-05 3:31 ` Jiangfeng Xiao
2024-03-05 9:32 ` Kees Cook
2024-03-05 11:38 ` Jiangfeng Xiao
2024-03-05 17:58 ` Josh Poimboeuf
2024-03-06 4:00 ` Jiangfeng Xiao
2024-03-06 9:52 ` Russell King (Oracle)
2024-03-06 16:02 ` Josh Poimboeuf
2024-03-09 14:58 ` David Laight
2024-03-18 4:01 ` Jiangfeng Xiao
2024-03-05 2:54 ` Jiangfeng Xiao
2024-03-05 3:12 ` Jiangfeng Xiao
2024-03-20 2:19 ` [PATCH] ARM: unwind: improve unwinders for noreturn case Jiangfeng Xiao
2024-03-20 2:46 ` Kees Cook
2024-03-20 3:30 ` Jiangfeng Xiao
2024-03-20 3:34 ` Matthew Wilcox
2024-03-20 3:46 ` Jiangfeng Xiao
2024-03-20 3:44 ` [PATCH v2] " Jiangfeng Xiao
2024-03-20 8:45 ` Russell King (Oracle)
2024-03-20 15:30 ` Jiangfeng Xiao
2024-03-20 19:40 ` Russell King (Oracle)
2024-03-21 9:44 ` Jiangfeng Xiao
2024-03-21 10:22 ` David Laight
2024-03-21 11:23 ` Russell King (Oracle)
2024-03-21 12:07 ` David Laight
2024-03-21 12:22 ` Russell King (Oracle)
2024-03-21 12:57 ` David Laight
2024-03-21 13:08 ` Russell King (Oracle)
2024-03-21 14:37 ` David Laight
2024-03-21 14:56 ` Russell King (Oracle)
2024-03-21 15:20 ` David Laight
2024-03-21 15:33 ` Russell King (Oracle)
2024-03-21 22:43 ` Ard Biesheuvel [this message]
2024-03-22 0:08 ` Russell King (Oracle)
2024-03-22 9:24 ` David Laight
2024-03-22 9:52 ` Russell King (Oracle)
2024-03-22 12:54 ` Jiangfeng Xiao
2024-03-22 14:16 ` David Laight
2024-03-20 15:41 ` [PATCH v3] " Jiangfeng Xiao
2024-03-20 19:42 ` Russell King (Oracle)
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=CAMj1kXG2EGvgGuV-K7h5qDVJeLMd5hkq8GzigzCRzh9Z8cgyWw@mail.gmail.com \
--to=ardb@kernel.org \
--cc=David.Laight@aculab.com \
--cc=akpm@linux-foundation.org \
--cc=amergnat@baylibre.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=arnd@arndb.de \
--cc=dave.hansen@linux.intel.com \
--cc=douzhaolei@huawei.com \
--cc=gustavoars@kernel.org \
--cc=haibo.li@mediatek.com \
--cc=jannh@google.com \
--cc=jpoimboe@kernel.org \
--cc=keescook@chromium.org \
--cc=kepler.chenxin@huawei.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@armlinux.org.uk \
--cc=nixiaoming@huawei.com \
--cc=peterz@infradead.org \
--cc=wangbing6@huawei.com \
--cc=wangfangpeng1@huawei.com \
--cc=willy@infradead.org \
--cc=xiaojiangfeng@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox