[PATCH v2] elf: Don't set .note.GNU-stack type to SHT_NOTE
H.J. Lu
hjl.tools@gmail.com
Mon Jan 12 23:34:08 GMT 2026
On Mon, Jan 12, 2026 at 6:52 PM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 11.01.2026 01:57, H.J. Lu wrote:
> > On Sat, Jan 10, 2026 at 5:35 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >>
> >> On Sat, Jan 10, 2026, 5:28 PM Jan Beulich <jbeulich@suse.com> wrote:
> >>>
> >>> On 10.01.2026 04:50, H.J. Lu wrote:
> >>>> .note.GNU-stack section doesn't conform to SHT_NOTE spec:
> >>>>
> >>>> https://gabi.xinuos.com/v42/elf/07-pheader.html#note-sections
> >>>>
> >>>> since it is an empty section with the corresponding fields. It maps to
> >>>> PT_GNU_STACK segment, not PT_NOTE segment. It is inappropriate to set
> >>>> its type to SHT_NOTE.
> >>>
> >>> Then it's also inappropriate to name it .note.*, as that way it will be
> >>> covered by .note.* as commonly used
> >>
> >>
> >> This was an overnight when it was introduced.
> >> On the other hand, linker should check
> >> section type, not section name, except
> >> for special sections.
> >>
> >>> in linker scripts. I really wonder why
> >>> no-one has cared to respond to the patch when it was still uncommitted ...
> >
> > Here is the v2 patch to add more tests.
>
> I continue to disagree; see my comments in the bug. But of course I'm happy
> to learn ... Imo we should go with your originally propose patch plus the
> correction of the table entry in bfd/elf.c, requiring as a prereq the patch
> below (both yet to be properly tested for a wide range of targets).
1. The meaning of the SHT_NOTE section is determined by the contents of
the section, not by section names.
2. The sh_flags field of the SHT_NOTE section has no impact on the meaning of
the section.
3. SHT_NOTE sections are mapped to the PT_NOTE segment.
.note.GNU-stack section is none of the above. From day one, .note.GNU-stack
has been a SHT_PROGBITS section. It is simply wrong to set it to SHT_NOTE.
> Jan
>
> readelf: don't (silently) fail on empty SHT_NOTE sections
>
> Them simply containing no entries is not an error. Such sections simply
> have nothing to dump. (Exiting with non-zero status but no error message
> isn't quite appropriate anyway.)
Readelf should at least issue a warning for an empty SHT_NOTE which
indicates a user error.
> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -23802,8 +23802,8 @@ process_notes_at (Filedata * f
> char *end;
> bool res = true;
>
> - if (length <= 0)
> - return false;
> + if (length == 0)
> + return true;
>
> if (section)
> {
>
--
H.J.
More information about the Binutils
mailing list