From: Jiangfeng Xiao <xiaojiangfeng@huawei.com>
To: "Russell King (Oracle)" <linux@armlinux.org.uk>,
David Laight <David.Laight@aculab.com>
Cc: Ard Biesheuvel <ardb@kernel.org>, "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: Fri, 22 Mar 2024 20:54:09 +0800 [thread overview]
Message-ID: <18f5c5fd-4a5d-0c33-9d73-7e94c1e42f3f@huawei.com> (raw)
In-Reply-To: <Zf1UyxlDf/oCjXxr@shell.armlinux.org.uk>
On 2024/3/22 17:52, Russell King (Oracle) wrote:
> On Fri, Mar 22, 2024 at 09:24:20AM +0000, David Laight wrote:
>> From: Russell King
>>> Sent: 22 March 2024 00:09
>>>
>>> On Thu, Mar 21, 2024 at 11:43:41PM +0100, Ard Biesheuvel wrote:
>>>> 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.
>>>
>>> Arm32 doesn't have a BRK instruction. What would be appropriate after
>>> the no-return BL would be OS specific.
>>
>> It would need to depend on what was being compiled.
>
> Yes, but as for the rest...
>
>> For the kernel it could be much the same as BUG().
>> (Probably without any extra data.)
>> I suspect that arm32 could use 'swi' in kernel space,
>> but you wouldn't want to use that in userspace.
>>
>> Looks like armv5 has a bkpt instruction - could that be used?
>> Or does the kernel need to support armv4?
>>
>> The last arm I wrote anything for was a strongarm.
>
> Thank you David, but remember - I have programmed 32-bit Arm since 1992,
> and wrote the majority of the 32-bit Arm kernel support. I think I know
> what I'm walking about by now.
>
> The compiler can't do the same as BUG() - that is a kernel specific
> construct and not an architecture one. It is an undefined instruction
> specifically chosen to be undefined on both 32-bit and 16-bit Arm ISAs.
>
> As for your idea of using "swi" in kernel space, no that's never going
> to happen - to shoe-horn that into the SWI exception path for the sake
> of the compiler would be totally idiotic - it would cause userspace
> performance regressions for something that never happens. Moreover,
> with EABI the "comment" field in the "swi" instruction is ignored so
> all SWIs under EABI are treated the same. So no, that's not going to
> work without causing inefficiencies - again - for a case that will
> likely never happen.
>
> Whereas we already provide an abort() function because iirc the
> compiler used to emit branches to that due to noreturn functions. If
> correct, there's previous convention for doing this - and abort() is
> still exists in the kernel and in userspace since it's part of ANSI
> C. This would be a more reliable and portable solution, but probably
> not for embedded platforms - and that's probably why it got removed.
>
> There isn't going to be a single solution to this which satisfies
> everyone, and I don't blame the compiler people for deciding to
> basically give up with putting any instruction after a call to a
> no-return function - because there isn't an instruction defined in
> the architecture that _could_ be put there that would work everywhere.
>
If the compiler inserts (a branch to 'abort') behind (no-return BL)
that does not apply to ARM32 embedded platforms, do you think the
"[PATCH v3] ARM: unwind: improve unwinders for noreturn case"
submitted the day before yesterday can be used as a
complementary solution?
2) we're unwinding a frame that has been created because of a branch,
where the PC points at the next instruction _after_ that callsite.
When we hit the second type of frame, "pc-1" is closer to callsite,
and no problem is introduced. In addition, the issue of the 'noreturn'
can be solved.
next prev parent reply other threads:[~2024-03-22 12:54 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
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 [this message]
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=18f5c5fd-4a5d-0c33-9d73-7e94c1e42f3f@huawei.com \
--to=xiaojiangfeng@huawei.com \
--cc=David.Laight@aculab.com \
--cc=akpm@linux-foundation.org \
--cc=amergnat@baylibre.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=ardb@kernel.org \
--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 \
/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