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, 10 Feb 2021 14:40:38 +0000
From:   Jianlin Lv <Jianlin.Lv@....com>
To:     John Garry <john.garry@...wei.com>,
        "will@...nel.org" <will@...nel.org>,
        "mathieu.poirier@...aro.org" <mathieu.poirier@...aro.org>,
        "leo.yan@...aro.org" <leo.yan@...aro.org>,
        "peterz@...radead.org" <peterz@...radead.org>,
        "mingo@...hat.com" <mingo@...hat.com>,
        "acme@...nel.org" <acme@...nel.org>,
        Mark Rutland <Mark.Rutland@....com>,
        "alexander.shishkin@...ux.intel.com" 
        <alexander.shishkin@...ux.intel.com>,
        "jolsa@...hat.com" <jolsa@...hat.com>,
        "namhyung@...nel.org" <namhyung@...nel.org>,
        "irogers@...gle.com" <irogers@...gle.com>,
        "agerstmayr@...hat.com" <agerstmayr@...hat.com>,
        "kan.liang@...ux.intel.com" <kan.liang@...ux.intel.com>,
        "adrian.hunter@...el.com" <adrian.hunter@...el.com>
CC:     "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: RE: [PATCH v2] perf tools: Fix arm64 build error with gcc-11



> -----Original Message-----
> From: John Garry <john.garry@...wei.com>
> Sent: Wednesday, February 10, 2021 5:38 PM
> To: Jianlin Lv <Jianlin.Lv@....com>; will@...nel.org;
> mathieu.poirier@...aro.org; leo.yan@...aro.org; peterz@...radead.org;
> mingo@...hat.com; acme@...nel.org; Mark Rutland
> <Mark.Rutland@....com>; alexander.shishkin@...ux.intel.com;
> jolsa@...hat.com; namhyung@...nel.org; irogers@...gle.com;
> agerstmayr@...hat.com; kan.liang@...ux.intel.com;
> adrian.hunter@...el.com
> Cc: linux-kernel@...r.kernel.org
> Subject: Re: [PATCH v2] perf tools: Fix arm64 build error with gcc-11
>
> On 10/02/2021 03:24, Jianlin Lv wrote:
> > gcc version: 11.0.0 20210208 (experimental) (GCC)
> >
> > Following build error on arm64:
> >
> > .......
> > In function ‘printf’,
> >      inlined from ‘regs_dump__printf’ at util/session.c:1141:3,
> >      inlined from ‘regs__printf’ at util/session.c:1169:2:
> > /usr/include/aarch64-linux-gnu/bits/stdio2.h:107:10: \
> >    error: ‘%-5s’ directive argument is null [-Werror=format-overflow=]
> >
> > 107 |   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, \
> >                  __va_arg_pack ());
> >
> > ......
> > In function ‘fprintf’,
> >    inlined from ‘perf_sample__fprintf_regs.isra’ at \
> >      builtin-script.c:622:14:
> > /usr/include/aarch64-linux-gnu/bits/stdio2.h:100:10: \
> >      error: ‘%5s’ directive argument is null [-Werror=format-overflow=]
> >    100 |   return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
> >    101 |                         __va_arg_pack ());
> >
> > cc1: all warnings being treated as errors .......
> >
> > This patch fixes Wformat-overflow warnings. Add ternary operator, The
> > statement evaluates to "Unknown" if reg_name==NULL is met.
> >
> > Signed-off-by: Jianlin Lv <Jianlin.Lv@....com>
> > ---
> > v2: Add ternary operator to avoid similar errors in other arch.
> > ---
> >   tools/perf/builtin-script.c                            | 4 +++-
> >   tools/perf/util/scripting-engines/trace-event-python.c | 4 +++-
> >   tools/perf/util/session.c                              | 5 +++--
> >   3 files changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> > index 42dad4a0f8cf..d59da3a063d0 100644
> > --- a/tools/perf/builtin-script.c
> > +++ b/tools/perf/builtin-script.c
> > @@ -635,6 +635,7 @@ static int perf_sample__fprintf_regs(struct
> regs_dump *regs, uint64_t mask,
> >   {
> >   unsigned i = 0, r;
> >   int printed = 0;
> > +const char *reg_name;
> >
> >   if (!regs || !regs->regs)
> >   return 0;
> > @@ -643,7 +644,8 @@ static int perf_sample__fprintf_regs(struct
> > regs_dump *regs, uint64_t mask,
> >
> >   for_each_set_bit(r, (unsigned long *) &mask, sizeof(mask) * 8) {
> >   u64 val = regs->regs[i++];
> > -printed += fprintf(fp, "%5s:0x%"PRIx64" ", perf_reg_name(r),
> val);
> > +reg_name = perf_reg_name(r);
> > +printed += fprintf(fp, "%5s:0x%"PRIx64" ", reg_name ?:
> "Unknown",
> > +val);
>
> is it possible not have to do this check for NULL and reassignment
> everywhere?
>

In fact, Wformat-overflow warning only occurs during the compilation of
the two files util/session.c and builtin-script.c.

util/scripting-engines/trace-event-python.c can be compiled. In order to
prevent unexpected exceptions, I changed it in the same way.

To be honest, I did not fully understand this comment. Do you mean to
adopt other ways to solve this issue? Could you give me more tips?

In addition, other comments are of great help to me, thank you.

Jianlin

> >   }
> >
> >   return printed;
> > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c
> > b/tools/perf/util/scripting-engines/trace-event-python.c
> > index c83c2c6564e0..e1222cc6a699 100644
> > --- a/tools/perf/util/scripting-engines/trace-event-python.c
> > +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> > @@ -691,6 +691,7 @@ static int regs_map(struct regs_dump *regs,
> uint64_t mask, char *bf, int size)
> >   {
> >   unsigned int i = 0, r;
> >   int printed = 0;
> > +const char *reg_name;
> >
> >   bf[0] = 0;
> >
> > @@ -700,9 +701,10 @@ static int regs_map(struct regs_dump *regs,
> uint64_t mask, char *bf, int size)
> >   for_each_set_bit(r, (unsigned long *) &mask, sizeof(mask) * 8) {
>
> a good practice is to limit scope of variables as much as possible, so
> reg_name could be declared here
>
> >   u64 val = regs->regs[i++];
> >
> > +reg_name = perf_reg_name(r);
> >   printed += scnprintf(bf + printed, size - printed,
> >        "%5s:0x%" PRIx64 " ",
> > -     perf_reg_name(r), val);
> > +     reg_name ?: "Unknown", val);
> >   }
> >
> >   return printed;
> > diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> > index 25adbcce0281..1058d8487e98 100644
> > --- a/tools/perf/util/session.c
> > +++ b/tools/perf/util/session.c
> > @@ -1135,12 +1135,13 @@ static void branch_stack__printf(struct
> perf_sample *sample, bool callstack)
> >   static void regs_dump__printf(u64 mask, u64 *regs)
> >   {
> >   unsigned rid, i = 0;
> > +const char *reg_name;
> >
> >   for_each_set_bit(rid, (unsigned long *) &mask, sizeof(mask) * 8) {
> >   u64 val = regs[i++];
> > -
> > +reg_name = perf_reg_name(rid);
> >   printf(".... %-5s 0x%016" PRIx64 "\n",
> > -       perf_reg_name(rid), val);
> > +       reg_name ?: "Unknown", val);
>
> super nit: it's "unknown" in util/perf_regs.h::perf_reg_name(), so nice to be
> consistent
>
>
> >   }
> >   }
> >
> >
>
> thanks,
> John
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ