net/smc: Use static_assert() to check struct sizes
authorGustavo A. R. Silva <gustavoars@kernel.org>
Thu, 8 Aug 2024 22:07:54 +0000 (16:07 -0600)
committerJakub Kicinski <kuba@kernel.org>
Tue, 13 Aug 2024 01:41:42 +0000 (18:41 -0700)
Commit 9748dbc9f265 ("net/smc: Avoid -Wflex-array-member-not-at-end
warnings") introduced tagged `struct smc_clc_v2_extension_fixed` and
`struct smc_clc_smcd_v2_extension_fixed`. We want to ensure that when
new members need to be added to the flexible structures, they are
always included within these tagged structs.

So, we use `static_assert()` to ensure that the memory layout for
both the flexible structure and the tagged struct is the same after
any changes.

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Jan Karcher <jaka@linux.ibm.com>
Link: https://patch.msgid.link/ZrVBuiqFHAORpFxE@cute
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/smc/smc_clc.h

index 467effb50cd65789c61da846de681687aedc41d6..5625fda2960b03e76940c8e8f99641c0ad5effdb 100644 (file)
@@ -145,6 +145,8 @@ struct smc_clc_v2_extension {
        );
        u8 user_eids[][SMC_MAX_EID_LEN];
 };
+static_assert(offsetof(struct smc_clc_v2_extension, user_eids) == sizeof(struct smc_clc_v2_extension_fixed),
+             "struct member likely outside of struct_group_tagged()");
 
 struct smc_clc_msg_proposal_prefix {   /* prefix part of clc proposal message*/
        __be32 outgoing_subnet; /* subnet mask */
@@ -169,6 +171,8 @@ struct smc_clc_smcd_v2_extension {
        );
        struct smc_clc_smcd_gid_chid gidchid[];
 };
+static_assert(offsetof(struct smc_clc_smcd_v2_extension, gidchid) == sizeof(struct smc_clc_smcd_v2_extension_fixed),
+             "struct member likely outside of struct_group_tagged()");
 
 struct smc_clc_msg_proposal {  /* clc proposal message sent by Linux */
        struct smc_clc_msg_hdr hdr;