lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200320081153.GB2549@willie-the-truck>
Date:   Fri, 20 Mar 2020 08:11:54 +0000
From:   Will Deacon <will@...nel.org>
To:     Nick Desaulniers <ndesaulniers@...gle.com>
Cc:     Ilie Halip <ilie.halip@...il.com>,
        Catalin Marinas <catalin.marinas@....com>,
        Kees Cook <keescook@...omium.org>,
        Sami Tolvanen <samitolvanen@...gle.com>,
        Andre Przywara <andre.przywara@....com>,
        Linux ARM <linux-arm-kernel@...ts.infradead.org>,
        LKML <linux-kernel@...r.kernel.org>,
        clang-built-linux <clang-built-linux@...glegroups.com>
Subject: Re: [PATCH] arm64: alternative: fix build with clang integrated
 assembler

On Thu, Mar 19, 2020 at 04:43:56PM -0700, Nick Desaulniers wrote:
> On Thu, Mar 19, 2020 at 2:45 PM Ilie Halip <ilie.halip@...il.com> wrote:
> >
> > Building an arm64 defconfig with clang's integrated assembler, this error
> > occurs:
> >     <instantiation>:2:2: error: unrecognized instruction mnemonic
> >      _ASM_EXTABLE 9999b, 9f
> >      ^
> >     arch/arm64/mm/cache.S:50:1: note: while in macro instantiation
> >     user_alt 9f, "dc cvau, x4", "dc civac, x4", 0
> >     ^
> >
> > While GNU as seems fine with case-sensitive macro instantiations, clang
> > doesn't, so use the actual macro name (_asm_extable) as in the rest of
> > the file.
> >
> > Also checked that the generated assembly matches the GCC output.
> >
> > Fixes: 290622efc76e ("arm64: fix "dc cvau" cache operation on errata-affected core")
> > Link: https://github.com/ClangBuiltLinux/linux/issues/924
> > Signed-off-by: Ilie Halip <ilie.halip@...il.com>
> > ---
> >  arch/arm64/include/asm/alternative.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h
> > index 324e7d5ab37e..5e5dc05d63a0 100644
> > --- a/arch/arm64/include/asm/alternative.h
> > +++ b/arch/arm64/include/asm/alternative.h
> > @@ -221,7 +221,7 @@ alternative_endif
> >
> >  .macro user_alt, label, oldinstr, newinstr, cond
> >  9999:  alternative_insn "\oldinstr", "\newinstr", \cond
> > -       _ASM_EXTABLE 9999b, \label
> > +       _asm_extable 9999b, \label
> >  .endm
> 
> Testing a -next defconfig build, if I apply this, apply fixes for
> https://github.com/ClangBuiltLinux/linux/issues/913, then disable
> CONFIG_KVM, I can assemble (with Clang's integrated assembler) and
> boot an aarch64 kernel.  I think that's a first for Clang.  Wow.
> 
> For CONFIG_KVM, I see:
> arch/arm64/kvm/hyp/entry.S:112:87: error: too many positional arguments
>  alternative_insn nop, .inst (0xd500401f | ((0) << 16 | (4) << 5) |
> ((!!1) << 8)), 4, 1
> 
>                ^
> which also uses `alternative_insn`, but not `user_alt`, so another bug
> for us to look into, filed:
> https://github.com/ClangBuiltLinux/linux/issues/939
> 
> Looks like `_asm_extable` itself is a macro, defined in
> arch/arm64/include/asm/assembler.h on line 125.  It's probably easy to
> fix this in clang, but from a consistency with the rest of the file
> (arch/arm64/include/asm/alternative.h) this patch should be accepted.
> 
> Reviewed-by: Nick Desaulniers <ndesaulniers@...gle.com>
> Tested-by: Nick Desaulniers <ndesaulniers@...gle.com>

Thanks, I'll pick this up as a fix.

Will

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ