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]
Message-ID: <CAEf4Bza3vs3P0+zua5j8kJwCDXeiA3Up+t8f58AqswceHca7cA@mail.gmail.com>
Date:   Tue, 16 Mar 2021 14:34:40 -0700
From:   Andrii Nakryiko <andrii.nakryiko@...il.com>
To:     Daniel Borkmann <daniel@...earbox.net>
Cc:     Pedro Tammela <pctammela@...il.com>,
        Alexei Starovoitov <ast@...nel.org>,
        Andrii Nakryiko <andrii@...nel.org>,
        Martin KaFai Lau <kafai@...com>,
        Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>,
        John Fastabend <john.fastabend@...il.com>,
        KP Singh <kpsingh@...nel.org>,
        Nathan Chancellor <nathan@...nel.org>,
        Nick Desaulniers <ndesaulniers@...gle.com>,
        Networking <netdev@...r.kernel.org>, bpf <bpf@...r.kernel.org>,
        open list <linux-kernel@...r.kernel.org>,
        clang-built-linux <clang-built-linux@...glegroups.com>
Subject: Re: [PATCH] libbpf: avoid inline hint definition from 'linux/stddef.h'

On Tue, Mar 16, 2021 at 2:01 PM Daniel Borkmann <daniel@...earbox.net> wrote:
>
> On 3/14/21 6:38 PM, Pedro Tammela wrote:
> > Linux headers might pull 'linux/stddef.h' which defines
> > '__always_inline' as the following:
> >
> >     #ifndef __always_inline
> >     #define __always_inline __inline__
> >     #endif
> >
> > This becomes an issue if the program picks up the 'linux/stddef.h'
> > definition as the macro now just hints inline to clang.
>
> How did the program end up including linux/stddef.h ? Would be good to
> also have some more details on how we got here for the commit desc.

It's an UAPI header, so why not? Is there anything special about
stddef.h that makes it unsuitable to be included?

>
> > This change now enforces the proper definition for BPF programs
> > regardless of the include order.
> >
> > Signed-off-by: Pedro Tammela <pctammela@...il.com>
> > ---
> >   tools/lib/bpf/bpf_helpers.h | 7 +++++--
> >   1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h
> > index ae6c975e0b87..5fa483c0b508 100644
> > --- a/tools/lib/bpf/bpf_helpers.h
> > +++ b/tools/lib/bpf/bpf_helpers.h
> > @@ -29,9 +29,12 @@
> >    */
> >   #define SEC(NAME) __attribute__((section(NAME), used))
> >
> > -#ifndef __always_inline
> > +/*
> > + * Avoid 'linux/stddef.h' definition of '__always_inline'.
> > + */
>
> I think the comment should have more details on 'why' we undef it as in
> few months looking at it again, the next question to dig into would be
> what was wrong with linux/stddef.h. Providing a better rationale would
> be nice for readers here.

So for whatever reason commit bot didn't send notification, but I've
already landed this yesterday. To me, with #undef + #define it's
pretty clear that we "force-define" __always_inline exactly how we
want it, but we can certainly add clarifying comment in the follow up,
if you think it's needed.

>
> > +#undef __always_inline
> >   #define __always_inline inline __attribute__((always_inline))
> > -#endif
> > +
> >   #ifndef __noinline
> >   #define __noinline __attribute__((noinline))
> >   #endif
> >
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ