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: <alpine.LSU.2.21.2002241319150.12812@wotan.suse.de>
Date:   Mon, 24 Feb 2020 13:28:36 +0000 (UTC)
From:   Michael Matz <matz@...e.de>
To:     Nick Desaulniers <ndesaulniers@...gle.com>
cc:     Arvind Sankar <nivedita@...m.mit.edu>,
        Fangrui Song <maskray@...gle.com>,
        Borislav Petkov <bp@...en8.de>,
        Nathan Chancellor <natechancellor@...il.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Ingo Molnar <mingo@...hat.com>,
        "H. Peter Anvin" <hpa@...or.com>,
        "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" <x86@...nel.org>,
        LKML <linux-kernel@...r.kernel.org>,
        clang-built-linux <clang-built-linux@...glegroups.com>,
        Kees Cook <keescook@...omium.org>
Subject: Re: [PATCH 2/2] x86/boot/compressed: Remove unnecessary sections
 from bzImage

Hello,

On Sat, 22 Feb 2020, Nick Desaulniers wrote:

> > > > In GNU ld, it seems that .shstrtab .symtab and .strtab are special
> > > > cased. Neither the input section description *(.shstrtab) nor *(*)
> > > > discards .shstrtab . I feel that this is a weird case (probably even a bug)
> > > > that lld should not implement.
> > >
> > > Ok, forget what the tools do for a second: why is .shstrtab special and
> > > why would one want to keep it?
> > >
> > > Because one still wants to know what the section names of an object are
> > > or other tools need it or why?
> > >
> > > Thx.
> > >
> > > --
> > > Regards/Gruss,
> > >     Boris.
> > >
> > > https://people.kernel.org/tglx/notes-about-netiquette
> >
> > .shstrtab is required by the ELF specification. The e_shstrndx field in
> > the ELF header is the index of .shstrtab, and each section in the
> > section table is required to have an sh_name that points into the
> > .shstrtab.
> 
> Yeah, I can see it both ways.  That `*` doesn't glob all remaining
> sections is surprising to me, but bfd seems to be "extra helpful" in
> not discarding sections that are required via ELF spec.

In a way the /DISCARD/ assignment should be thought of as applying to 
_input_ sections (as all such section references on the RHS), not 
necessarily to output sections.  What this then means for sections that 
are synthesized by the link editor is less clear.  Some of them are 
generated regardless (as you noted, e.g. the symbol table and associated 
string sections, including section name string table), some of them are 
suppressed, and either lead to an followup error (e.g. with .gnu.hash), or 
to invalid output (e.g. missing .dynsym for executables simply lead to 
segfaults when running them).

That's the reason for the perceived inconsistency with behaviour on '*': 
it's application to synthesized sections.  Arguably bfd should be fixed to 
also not discard the other essential sections (or alternatively to give an 
error when an essential section is discarded).  The lld behaviour of e.g. 
discarding .shstrtab (or other synthesized sections necessary for valid 
ELF output) doesn't make much sense either, though.


Ciao,
Michael.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ