On Fri, Sep 08, 2023 at 07:03:17PM +0300, Alexey Dobriyan wrote: > On Fri, Sep 08, 2023 at 08:53:12AM -0700, Kees Cook wrote: > > On Fri, Sep 08, 2023 at 06:14:38PM +0300, Alexey Dobriyan wrote: > > > __DECLARE_FLEX_ARRAY(T, member) macro expands to > > > > > > struct { > > > struct {} __empty_member; > > > T member[]; > > > }; > > > > > > which is subtly wrong in C++ because sizeof(struct{}) is 1 not 0, > > > > Ewwww. Isn't this a bug in C++? > > Sort of, but it can't be fixed. > > > > changing UAPI structures layouts. > > > > > > This can be fixed by expanding to > > > > > > T member[]; > > > > > > Now g++ doesn't like "T member[]" either throwing errors on code like > > > this: > > > > > > struct S { > > > union { > > > T1 member1[]; > > > T2 member2[]; > > > }; > > > }; > > > > > > or > > > > > > struct S { > > > T member[]; > > > }; > > > So use > > > > > > T member[0]; > > > > > > which seems to work and does the right thing wrt structure layout. > > > > It seems sad to leave C++ broken, but I guess we have to do this. > > > > Acked-by: Kees Cook <keescook@xxxxxxxxxxxx> > > > > > Fix header guard while I'm at it. > > > > Hm, when did that get broken? Maybe that should be fixed separately? > > By your last commit? :( Oops. I'm shocked this hasn't caused bigger problems. > > > > Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> > > > > Probably a Fixes: tag would be nice too. > > OK > > Fixes: c8248faf3ca2 ("Compiler Attributes: counted_by: Adjust name and identifier expansion") > Fixes: 3080ea5553cc ("stddef: Introduce DECLARE_FLEX_ARRAY() helper") Okay, can you please split the patch so they can be backported separately? Then I'll get them landed, etc. Thanks for fixing these! -Kees -- Kees Cook