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: <CAKwvOdncnh1sGjaBDOepQrAc+AHgEr=gWTJqKSxwvPu0f5A1dg@mail.gmail.com>
Date:   Fri, 28 Jan 2022 10:59:55 -0800
From:   Nick Desaulniers <ndesaulniers@...gle.com>
To:     Changbin Du <changbin.du@...il.com>,
        Masahiro Yamada <masahiroy@...nel.org>
Cc:     Nathan Chancellor <nathan@...nel.org>,
        linux-kernel@...r.kernel.org, llvm@...ts.linux.dev,
        linux-riscv@...ts.infradead.org
Subject: Re: [PATCH] kallsyms: ignore local block labels generated by compiler

On Fri, Jan 28, 2022 at 7:21 AM Changbin Du <changbin.du@...il.com> wrote:
>
> On Fri, Jan 28, 2022 at 06:57:46PM +0800, Changbin Du wrote:
> > The llvm compiler can generate lots of local block labels and they might
> > overlap with C defined symbols. So let's ignore such local labels.
> >
> > Before this change, dumpstack shows a local symbol for epc:
> > [    0.040341][    T0] Hardware name: riscv-virtio,qemu (DT)
> > [    0.040376][    T0] epc : .LBB6_14+0x22/0x6a
> > [    0.040452][    T0]  ra : restore_all+0x12/0x6e
> >
> > After this change, the C defined symbol is shown which is expected:
> > [    0.035795][    T0] Hardware name: riscv-virtio,qemu (DT)
> > [    0.036332][    T0] epc : trace_hardirqs_on+0x54/0x13c
> > [    0.036567][    T0]  ra : restore_all+0x12/0x6e
> >
> > Signed-off-by: Changbin Du <changbin.du@...il.com>
> > ---
> >  scripts/kallsyms.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> > index 54ad86d13784..5f4be9d72a32 100644
> > --- a/scripts/kallsyms.c
> > +++ b/scripts/kallsyms.c
> > @@ -108,6 +108,7 @@ static bool is_ignored_symbol(const char *name, char type)
> >       /* Symbol names that begin with the following are ignored.*/
> >       static const char * const ignored_prefixes[] = {
> >               "$",                    /* local symbols for ARM, MIPS, etc. */
> > +             ".LBB",                 /* local block labels generated by compiler */
> I aslo found many symbols like '.Ltmpxxx', '.L__unnamed_xx'. So should we just
> ignore all symbols prefixed by '.L'?

.L prefixes are "local labels" meaning they don't get an entry in the
symbol table.  The trade off is that there is no such convention
between compiler generated local label naming conventions, vs hand
written ones.  If we omit all local labels, then it might be
surprising that a handwritten local label disappeared from this list.
I think though that we should omit all local labels, and if someone
needs a label to appear in their dumpstack, then they should simply
drop the .L prefix on their handwritten label.

>
> >               ".LASANPC",             /* s390 kasan local symbols */
> >               "__crc_",               /* modversions */
> >               "__efistub_",           /* arm64 EFI stub namespace */
> > --
> > 2.32.0
> >
>
> --
> Cheers,
> Changbin Du



-- 
Thanks,
~Nick Desaulniers

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ