[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250916184440.GA1245207@ax162>
Date: Tue, 16 Sep 2025 11:44:40 -0700
From: Nathan Chancellor <nathan@...nel.org>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: LKML <linux-kernel@...r.kernel.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Peter Zijlstra <peterz@...radead.org>,
kernel test robot <lkp@...el.com>,
Russell King <linux@...linux.org.uk>,
linux-arm-kernel@...ts.infradead.org,
Christophe Leroy <christophe.leroy@...roup.eu>,
Darren Hart <dvhart@...radead.org>,
Davidlohr Bueso <dave@...olabs.net>,
André Almeida <andrealmeid@...lia.com>,
x86@...nel.org, Alexander Viro <viro@...iv.linux.org.uk>,
Christian Brauner <brauner@...nel.org>, Jan Kara <jack@...e.cz>,
linux-fsdevel@...r.kernel.org
Subject: Re: [patch V2 2/6] kbuild: Disable asm goto on clang < 17
Hi Thomas,
First of all, sorry you got bit by this issue.
On Tue, Sep 16, 2025 at 06:33:11PM +0200, Thomas Gleixner wrote:
> clang < 17 fails to use scope local labels with asm goto:
>
> {
> __label__ local_lbl;
> ...
> unsafe_get_user(uval, uaddr, local_lbl);
> ...
> return 0;
> local_lbl:
> return -EFAULT;
> }
>
> when two such scopes exist in the same function:
>
> error: cannot jump from this asm goto statement to one of its possible targets
For the record, this is not specific to local labels, unique function
labels could trigger this error as well, as demonstrated by Nick's test
case:
https://github.com/ClangBuiltLinux/linux/issues/1886#issuecomment-1636342477
> That prevents using local labels for a cleanup based user access mechanism.
Indeed. This has only popped up a couple of times in the past couple of
years and each time it has been easy enough to work around by shuffling
the use of asm goto but as cleanup gets used in more places, this is
likely to cause problems.
> As there is no way to provide a simple test case for the 'depends on' test
> in Kconfig, mark ASM goto broken on clang versions < 17 to get this road
> block out of the way.
That being said, the commit title and message always references asm goto
in the general sense but this change only affects asm goto with outputs.
Is it sufficient to resolve the issues you were seeing? As far as I
understand it, the general issue can affect asm goto with or without
outputs but I assume x86 won't have any issues because the label is not
used in __get_user_asm when asm goto with outputs is not supported?
> Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
> Cc: Nathan Chancellor <nathan@...nel.org>
> ---
> V2: New patch
> ---
> init/Kconfig | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -96,9 +96,14 @@ config GCC_ASM_GOTO_OUTPUT_BROKEN
> default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400
> default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300
>
> +config CLANG_ASM_GOTO_OUTPUT_BROKEN
> + bool
> + depends on CC_IS_CLANG
> + default y if CLANG_VERSION < 170000
Assuming this change sticks, please consider including links to the
original bug report and the fix in LLVM:
https://github.com/ClangBuiltLinux/linux/issues/1886
https://github.com/llvm/llvm-project/commit/f023f5cdb2e6c19026f04a15b5a935c041835d14
> +
> config CC_HAS_ASM_GOTO_OUTPUT
> def_bool y
> - depends on !GCC_ASM_GOTO_OUTPUT_BROKEN
> + depends on !GCC_ASM_GOTO_OUTPUT_BROKEN && !CLANG_ASM_GOTO_OUTPUT_BROKEN
> depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
>
> config CC_HAS_ASM_GOTO_TIED_OUTPUT
>
Powered by blists - more mailing lists