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] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 15 Jun 2022 11:58:13 +0200
From:   Ard Biesheuvel <ardb@...nel.org>
To:     Mark Rutland <mark.rutland@....com>
Cc:     Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        Peter Zijlstra <peterz@...radead.org>,
        Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
        Heiko Carstens <hca@...ux.ibm.com>,
        Vasily Gorbik <gor@...ux.ibm.com>,
        Alexander Gordeev <agordeev@...ux.ibm.com>,
        Christian Borntraeger <borntraeger@...ux.ibm.com>,
        Sven Schnelle <svens@...ux.ibm.com>,
        "open list:MIPS" <linux-mips@...r.kernel.org>,
        "open list:S390" <linux-s390@...r.kernel.org>
Subject: Re: [PATCH 3/3] jump_label: make initial NOP patching the special case

On Wed, 15 Jun 2022 at 11:52, Mark Rutland <mark.rutland@....com> wrote:
>
> On Wed, Jun 08, 2022 at 12:45:12PM +0200, Ard Biesheuvel wrote:
> > Instead of defaulting to patching NOP opcodes at init time, and leaving
> > it to the architectures to override this if this is not needed, switch
> > to a model where doing nothing is the default. This is the common case
> > by far, as only MIPS requires NOP patching at init time. On all other
> > architectures, the correct encodings are emitted by the compiler and so
> > no initial patching is needed.
> >
> > Signed-off-by: Ard Biesheuvel <ardb@...nel.org>
> > ---
> >  Documentation/staging/static-keys.rst |  3 ---
> >  arch/arc/kernel/jump_label.c          | 13 -------------
> >  arch/arm/kernel/jump_label.c          |  6 ------
> >  arch/arm64/kernel/jump_label.c        | 11 -----------
> >  arch/mips/include/asm/jump_label.h    |  2 ++
> >  arch/parisc/kernel/jump_label.c       | 11 -----------
> >  arch/riscv/kernel/jump_label.c        | 12 ------------
> >  arch/s390/kernel/jump_label.c         |  5 -----
> >  arch/x86/kernel/jump_label.c          | 13 -------------
> >  kernel/jump_label.c                   | 14 +++-----------
> >  10 files changed, 5 insertions(+), 85 deletions(-)
>
> I have one minor comment below, but either way this is a nice cleanup (and I'm
> always happy to see __weak functions disappear), so FWIW:
>
>   Acked-by: Mark Rutland <mark.rutland@....com>
>
> [...]
>
> > diff --git a/kernel/jump_label.c b/kernel/jump_label.c
> > index b1ac2948be79..ff8576c00893 100644
> > --- a/kernel/jump_label.c
> > +++ b/kernel/jump_label.c
> > @@ -332,17 +332,9 @@ static int __jump_label_text_reserved(struct jump_entry *iter_start,
> >       return 0;
> >  }
> >
> > -/*
> > - * Update code which is definitely not currently executing.
> > - * Architectures which need heavyweight synchronization to modify
> > - * running code can override this to make the non-live update case
> > - * cheaper.
> > - */
> > -void __weak __init_or_module arch_jump_label_transform_static(struct jump_entry *entry,
> > -                                         enum jump_label_type type)
> > -{
> > -     arch_jump_label_transform(entry, type);
> > -}
> > +#ifndef arch_jump_label_transform_static
> > +#define arch_jump_label_transform_static(entry, type)
> > +#endif
>
> It might be slightly better to make this a static inline stub so that we always
> get the compiler to type-check it, e.g.
>
> | #ifndef arch_jump_label_transform_static
> | static inline void arch_jump_label_transform_static(struct jump_entry *entry,
> |                                                   enum jump_label_type type)
> | {
> |       /* nothing to do on most architectures */
> | }
> | #define arch_jump_label_transform_static arch_jump_label_transform_static
> | #endif
>

Yeah, good point. Note that the current patch is broken because of
this, as the empty string is not a statement, and so the if binds to
the following line (I got a couple of bot warnings about this)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ