[PATCH v2] elf: Don't set .note.GNU-stack type to SHT_NOTE

Michael Matz matz@suse.de
Tue Jan 13 17:33:21 GMT 2026


Hello,

On Tue, 13 Jan 2026, Jan Beulich wrote:

> >> Sam question to you then: Where exactly is this said in the spec? What am
> >> I overlooking?
> > 
> > https://gabi.xinuos.com/elf/07-pheader.html#note-sections
> 
> Well, that's a different incarnation from what I usually use, but the 
> wording is very similar if not identical. Hence my question remains: 
> Where is it said there that zero entries isn't permitted? It says "holds 
> a variable amount of entries" (none at all fitting this well) and "each 
> entry is an array of {4,8} -byte words". Hence my request: Please give 
> an exact quotation that makes clear that "empty" isn't legal.

It was clear to me from that language in the spec.  With your 
clarification on how you read it, yes I can see that that is a valid 
reading as well, maybe more valid even; i.e. zero sized section would 
contain no entries.  Hmm.

> Your reference to it having been around since 2003 also is only partly
> relevant. Iirc you were involved in the internal bug where suddenly a
> helper component of Xen didn't work anymore.

Ah, maybe that was causing the deja-vu, indeed.

> > So you did find the section that mandates the header of SHT_NOTE 
> > sections, yet you are still convinved that a zero-length SHT_NOTE 
> > section is okay?  I'm confused.
> 
> See above - I simply can't spot any statement to the effect of what 
> you're claiming. (And strictly speaking there's no "header of SHT_NOTE 
> sections" anyway. Every "entry" has to have such a header. Then: No 
> "entry", no header.

I'm inclined to reverse my opinion from upthread.  I.e. from a pure
specification perspective zero-sized SHT_NOTE sections are okay 
(corresponding to a no-entry note section/segment).  It will then 
automatically contribute into the PT_NOTE segment, but harmlessly so, as 
it contains no entries.  It will also continue to cause generation of the 
PT_GNU_STACK program header based on its name, exactly what we want.

There are more warts of .note.GNU-stack that need at least a little 
pondering:
(a) the usage of section flags to convey information, i.e. being 
    SHF_EXECINSTR to mean needing an executable stack.
    It's slightly surprising to find such flag on a SHT_NOTE section.
    (And what does it mean for the resulting PT_NOTE segment?)
(b) in .s files the .note.GNU-stack section is often generated by
    .section .note.GNU-stack,"",@progbits
    it may be surprising if the resulting .o file has a SHT_NOTE type,
    instead of the explicitely requested SHT_PROGBITS

I think none of those would hinder the usage of SHT_NOTE for 
.note.GNU-stack.  (a) shouldn't pose a problem anywhere, and the surprise 
is very limited.  For (b) the asm directive should probably continue to 
then make the gnu-stack section be SHT_PROGBITS, but either way the link 
editor needs to continue accepting PROGBITS .note.GNU-stack anyway, as a 
compatility measure.

Were there other reasons to reject the idea to .note.GNU-stack being 
SHT_NOTE (i.e. besides a presumed invalidity of zero-sized note sections 
and contribution into PT_NOTE)?  If there weren't I think I now agree with 
you that automatically generated .note.GNU-stack sections (or those not 
explicitely requesting a section type) can have type SHT_NOTE.

But the question remains if it _should_ have such?  Due to the warts above 
.note.GNU-stack will always need special handling somewhere, so changing 
the section type doesn't get rid of all of them (and perhaps adds some 
more special casing for the PT_NOTEs flags).  I don't know the answer to 
that, I can see arguments both ways :-/


Ciao,
Michael.


More information about the Binutils mailing list