On Mon, Nov 10, 2025 at 10:46 AM Gustavo A. R. Silva <[email protected]> wrote: > > -Wflex-array-member-not-at-end was introduced in GCC-14, and we are > getting ready to enable it, globally. > > Use the new TRAILING_OVERLAP() helper to fix the following warning: > > crypto/asymmetric_keys/restrict.c:20:34: warning: structure containing a > flexible array member is not at the end of another structure > [-Wflex-array-member-not-at-end] > > This helper creates a union between a flexible-array member (FAM) and a > set of MEMBERS that would otherwise follow it. > > This overlays the trailing MEMBER unsigned char data[10]; onto the FAM > struct asymmetric_key_id::data[], while keeping the FAM and the start > of MEMBER aligned. > > The static_assert() ensures this alignment remains, and it's > intentionally placed inmediately after the corresponding structures --no > blank line in between. > > Signed-off-by: Gustavo A. R. Silva <[email protected]>
Reviewed-by: Ignat Korchagin <[email protected]> > --- > crypto/asymmetric_keys/restrict.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/crypto/asymmetric_keys/restrict.c > b/crypto/asymmetric_keys/restrict.c > index afcd4d101ac5..86292965f493 100644 > --- a/crypto/asymmetric_keys/restrict.c > +++ b/crypto/asymmetric_keys/restrict.c > @@ -17,9 +17,12 @@ static struct asymmetric_key_id *ca_keyid; > > #ifndef MODULE > static struct { > - struct asymmetric_key_id id; > - unsigned char data[10]; > + /* Must be last as it ends in a flexible-array member. */ > + TRAILING_OVERLAP(struct asymmetric_key_id, id, data, > + unsigned char data[10]; > + ); > } cakey; > +static_assert(offsetof(typeof(cakey), id.data) == offsetof(typeof(cakey), > data)); The whole thing looks a bit convoluted to me just to declare a fixed-sized static buffer and call sizeof() in one place in the code. But I couldn't come up with a better refactor not introducing potential alignment side-effects. So LGTM. > static int __init ca_keys_setup(char *str) > { > -- > 2.43.0 >
