[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKwvOdkrgtyE3rU8Xa2B8QQJ1ZErSTB9PDuikPF6=4D4Q80XVQ@mail.gmail.com>
Date: Wed, 9 Mar 2022 13:53:50 -0800
From: Nick Desaulniers <ndesaulniers@...gle.com>
To: Nathan Chancellor <nathan@...nel.org>
Cc: Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
llvm@...ts.linux.dev, stable@...r.kernel.org,
Marc Zyngier <maz@...nel.org>,
James Morse <james.morse@....com>
Subject: Re: [PATCH] arm64: Do not include __READ_ONCE() block in assembly files
On Wed, Mar 9, 2022 at 11:19 AM Nathan Chancellor <nathan@...nel.org> wrote:
>
> When building arm64 defconfig + CONFIG_LTO_CLANG_{FULL,THIN}=y after
> commit 558c303c9734 ("arm64: Mitigate spectre style branch history side
> channels"), the following error occurs:
>
> <instantiation>:4:2: error: invalid fixup for movz/movk instruction
> mov w0, #ARM_SMCCC_ARCH_WORKAROUND_3
> ^
>
> Marc figured out that moving "#include <linux/init.h>" in
> include/linux/arm-smccc.h into a !__ASSEMBLY__ block resolves it. The
> full include chain with CONFIG_LTO=y from include/linux/arm-smccc.h:
>
> include/linux/init.h
> include/linux/compiler.h
> arch/arm64/include/asm/rwonce.h
> arch/arm64/include/asm/alternative-macros.h
> arch/arm64/include/asm/assembler.h
>
> The asm/alternative-macros.h include in asm/rwonce.h only happens when
> CONFIG_LTO is set, which ultimately casues asm/assembler.h to be
> included before the definition of ARM_SMCCC_ARCH_WORKAROUND_3. As a
> result, the preprocessor does not expand ARM_SMCCC_ARCH_WORKAROUND_3 in
> __mitigate_spectre_bhb_fw, which results in the error above.
>
> Avoid this problem by just avoiding the CONFIG_LTO=y __READ_ONCE() block
> in asm/rwonce.h with assembly files, as nothing in that block is useful
> to assembly files, which allows ARM_SMCCC_ARCH_WORKAROUND_3 to be
> properly expanded with CONFIG_LTO=y builds.
>
> Cc: stable@...r.kernel.org
> Fixes: e35123d83ee3 ("arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y")
> Link: https://lore.kernel.org/r/20220309155716.3988480-1-maz@kernel.org/
> Reported-by: Marc Zyngier <maz@...nel.org>
> Acked-by: James Morse <james.morse@....com>
> Signed-off-by: Nathan Chancellor <nathan@...nel.org>
Thanks for taking point on all of the BHB fallout.
Reviewed-by: Nick Desaulniers <ndesaulniers@...gle.com>
Tested-by: Nick Desaulniers <ndesaulniers@...gle.com>
> ---
>
> This is based on current mainline; if it should be based on a specific
> arm64 branch, please let me know.
>
> As 558c303c9734 is going to stable, I marked this for stable as well to
> avoid breaking Android. I used e35123d83ee3 for the fixes tag to make it
> clear to the stable team this should only go where that commit is
> present. If a different fixes tag should be used, please feel free to
> substitute.
>
> arch/arm64/include/asm/rwonce.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/include/asm/rwonce.h b/arch/arm64/include/asm/rwonce.h
> index 1bce62fa908a..56f7b1d4d54b 100644
> --- a/arch/arm64/include/asm/rwonce.h
> +++ b/arch/arm64/include/asm/rwonce.h
> @@ -5,7 +5,7 @@
> #ifndef __ASM_RWONCE_H
> #define __ASM_RWONCE_H
>
> -#ifdef CONFIG_LTO
> +#if defined(CONFIG_LTO) && !defined(__ASSEMBLY__)
>
> #include <linux/compiler_types.h>
> #include <asm/alternative-macros.h>
> @@ -66,7 +66,7 @@
> })
>
> #endif /* !BUILD_VDSO */
> -#endif /* CONFIG_LTO */
> +#endif /* CONFIG_LTO && !__ASSEMBLY__ */
>
> #include <asm-generic/rwonce.h>
>
>
> base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
> --
> 2.35.1
>
--
Thanks,
~Nick Desaulniers
Powered by blists - more mailing lists