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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADvTj4p8pykr4Vy-YSLcaXsfmuWAmZ9ay-np6mxTdwOT1LBnXw@mail.gmail.com>
Date:   Sat, 27 Aug 2022 04:47:14 -0600
From:   James Hilliard <james.hilliard1@...il.com>
To:     Andrii Nakryiko <andrii.nakryiko@...il.com>
Cc:     bpf@...r.kernel.org, Alexei Starovoitov <ast@...nel.org>,
        Daniel Borkmann <daniel@...earbox.net>,
        Andrii Nakryiko <andrii@...nel.org>,
        Martin KaFai Lau <martin.lau@...ux.dev>,
        Song Liu <song@...nel.org>, Yonghong Song <yhs@...com>,
        John Fastabend <john.fastabend@...il.com>,
        KP Singh <kpsingh@...nel.org>,
        Stanislav Fomichev <sdf@...gle.com>,
        Hao Luo <haoluo@...gle.com>, Jiri Olsa <jolsa@...nel.org>,
        Mykola Lysenko <mykolal@...com>, Shuah Khan <shuah@...nel.org>,
        Alan Maguire <alan.maguire@...cle.com>,
        linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] selftests/bpf: Fix conflicts with built-in functions in bpf_iter_ksym

On Fri, Aug 26, 2022 at 10:55 PM Andrii Nakryiko
<andrii.nakryiko@...il.com> wrote:
>
> On Thu, Aug 25, 2022 at 6:26 PM James Hilliard
> <james.hilliard1@...il.com> wrote:
> >
> > Both tolower and toupper are built in c functions, we should not
>
> Really? How come? Can you point out where this is specified in C
> standard? From what I can tell you have to include <ctype.h> to get
> toupper()/tolower().

See background on this sort of issue:
https://stackoverflow.com/a/20582607
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=12213

(C99, 7.1.3p1) "All identifiers with external linkage in any of the following
subclauses (including the future library directions) are always reserved
for use as identifiers with external linkage."

>
> This seems like yet another GCC-BPF quirk?

Seems GCC takes a stricter interpretation of the standard here than
llvm.

It's also documented behavior in GCC:
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#index-std-2

See:
The ISO C90 functions abort, abs, acos, asin, atan2, atan, calloc, ceil,
cosh, cos, exit, exp, fabs, floor, fmod, fprintf, fputs, free, frexp, fscanf,
isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace,
isupper, isxdigit, tolower, toupper, labs, ldexp, log10, log, malloc, memchr,
memcmp, memcpy, memset, modf, pow, printf, putchar, puts, realloc,
scanf, sinh, sin, snprintf, sprintf, sqrt, sscanf, strcat, strchr,
strcmp, strcpy,
strcspn, strlen, strncat, strncmp, strncpy, strpbrk, strrchr, strspn, strstr,
tanh, tan, vfprintf, vprintf and vsprintf are all recognized as
built-in functions
unless -fno-builtin is specified (or -fno-builtin-function is specified for an
individual function).

We could disable builtin functions but it seems more correct to just
rename it so that it doesn't conflict.

>
> > redefine them as this can result in a build error.
> >
> > Fixes the following errors:
> > progs/bpf_iter_ksym.c:10:20: error: conflicting types for built-in function 'tolower'; expected 'int(int)' [-Werror=builtin-declaration-mismatch]
> >    10 | static inline char tolower(char c)
> >       |                    ^~~~~~~
> > progs/bpf_iter_ksym.c:5:1: note: 'tolower' is declared in header '<ctype.h>'
> >     4 | #include <bpf/bpf_helpers.h>
> >   +++ |+#include <ctype.h>
> >     5 |
> > progs/bpf_iter_ksym.c:17:20: error: conflicting types for built-in function 'toupper'; expected 'int(int)' [-Werror=builtin-declaration-mismatch]
> >    17 | static inline char toupper(char c)
> >       |                    ^~~~~~~
> > progs/bpf_iter_ksym.c:17:20: note: 'toupper' is declared in header '<ctype.h>'
> >
> > Signed-off-by: James Hilliard <james.hilliard1@...il.com>
> > ---
> >  tools/testing/selftests/bpf/progs/bpf_iter_ksym.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/testing/selftests/bpf/progs/bpf_iter_ksym.c b/tools/testing/selftests/bpf/progs/bpf_iter_ksym.c
> > index 285c008cbf9c..9ba14c37bbcc 100644
> > --- a/tools/testing/selftests/bpf/progs/bpf_iter_ksym.c
> > +++ b/tools/testing/selftests/bpf/progs/bpf_iter_ksym.c
> > @@ -7,14 +7,14 @@ char _license[] SEC("license") = "GPL";
> >
> >  unsigned long last_sym_value = 0;
> >
> > -static inline char tolower(char c)
> > +static inline char to_lower(char c)
> >  {
> >         if (c >= 'A' && c <= 'Z')
> >                 c += ('a' - 'A');
> >         return c;
> >  }
> >
> > -static inline char toupper(char c)
> > +static inline char to_upper(char c)
> >  {
> >         if (c >= 'a' && c <= 'z')
> >                 c -= ('a' - 'A');
> > @@ -54,7 +54,7 @@ int dump_ksym(struct bpf_iter__ksym *ctx)
> >         type = iter->type;
> >
> >         if (iter->module_name[0]) {
> > -               type = iter->exported ? toupper(type) : tolower(type);
> > +               type = iter->exported ? to_upper(type) : to_lower(type);
> >                 BPF_SEQ_PRINTF(seq, "0x%llx %c %s [ %s ] ",
> >                                value, type, iter->name, iter->module_name);
> >         } else {
> > --
> > 2.34.1
> >

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ