Re: [PATCH net-next v8 03/10] net/smc: unify the structs of accept or confirm message for v1 and v2

Alexandra Winter
2023-12-20T11:38:02Z

On 19.12.23 15:26, Wen Gu wrote:
> struct smc_clc_msg_accept_confirm { /* clc accept / confirm message */
> - struct smc_clc_msg_hdr hdr;
> - union {
> - struct smcr_clc_msg_accept_confirm r0; /* SMC-R */
> - struct { /* SMC-D */
> - struct smcd_clc_msg_accept_confirm_common d0;
> - u32 reserved5[3];
> - };
> - };
> -} __packed; /* format defined in RFC7609 */
> -
> -struct smc_clc_msg_accept_confirm_v2 { /* clc accept / confirm message */
> struct smc_clc_msg_hdr hdr;
> union {
> struct { /* SMC-R */
> struct smcr_clc_msg_accept_confirm r0;
> - u8 eid[SMC_MAX_EID_LEN];
> - u8 reserved6[8];
> - } r1;
> + struct { /* v2 only */
> + u8 eid[SMC_MAX_EID_LEN];
> + u8 reserved6[8];
> + } __packed r1;
> + };
> struct { /* SMC-D */
> struct smcd_clc_msg_accept_confirm_common d0;
> - __be16 chid;
> - u8 eid[SMC_MAX_EID_LEN];
> - u8 reserved5[8];
> - } d1;
> + struct { /* v2 only, but 12 bytes reserved in v1 */
> + __be16 chid;
> + u8 eid[SMC_MAX_EID_LEN];
> + u8 reserved5[8];
> + } __packed d1;
> + };
> };
> };

I still think the __packed at the outmost level is the safest place.
Like you have it now the compiler could place unused memory between
ro and r1 or between d0 and d1.
Afaik compilers don't do that, if the blocks are word-aligned, but
there is no guarantee.

Up to you. My R-b still applies.
Sandy