On Tue, Feb 18, 2025 at 11:51:41AM -0800, Kees Cook wrote:
> On Fri, Feb 14, 2025 at 11:21:07AM +0100, Jakub Jelinek wrote:
> > On Thu, Feb 13, 2025 at 02:10:25PM +0100, Jakub Jelinek wrote:
> > > Kees, are you submitting this under assignment to FSF (maybe the Google 
> > > one
> > > if it has one) or DCO?  See https://gcc.gnu.org/contribute.html#legal
> > > for details.  If DCO, can you add your Signed-off-by: tag for it?
> > > 
> > > So far lightly tested, ok for trunk if it passes bootstrap/regtest?
> > 
> > Bootstrapped/regtested on x86_64-linux and i686-linux successfully.
> 
> Thank you for getting this done! I really appreciate having this
> available. I'll give it a spin. :)

Sorry this took me so long. I finally tested this and while it does
allow setting nonstring on multi-dim char arrays, it looks like the
initializer check is still broken:

$ cat multi.c
const char table_sigs[][4] __attribute__((nonstring)) = {
        "BERT", "BGRT", "CPEP", "ECDT"
};
$ gcc -o multi.o -c multi.c -O2 -Wall -Wunterminated-string-initialization
multi.c:2:9: warning: initializer-string for array of 'char' truncates NUL 
terminator but destination lacks 'nonstring' attribute (5 chars into 4 
available) [-Wunterminated-string-initialization]
    2 |         "BERT", "BGRT", "CPEP", "ECDT"
      |         ^~~~~~
multi.c:2:17: warning: initializer-string for array of 'char' truncates NUL 
terminator but destination lacks 'nonstring' attribute (5 chars into 4 
available) [-Wunterminated-string-initialization]
    2 |         "BERT", "BGRT", "CPEP", "ECDT"
      |                 ^~~~~~
...

It looks like get_attr_nonstring_decl() still isn't correctly finding
the attribute. (It looks like multi-dimensional static initializers
tests that drop the NUL are missing in commit ab714e60870d.)

And to answer your earlier question about Linux's use, while we have
the __nonstring macro for applying the attribute, I intend to add
__nonstring_array that is version-checked against GCC 15.

-Kees

-- 
Kees Cook

Reply via email to