[PATCH v4] scsi: qla2xxx: Fix flex array member not at end
Jesse Taube <[email protected]>
| Newsgroups | org.kernel.vger.linux-scsi,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
In qla_edif_bsg.h: `struct fc_bsg_reply` and `struct fc_bsg_request` have flexible array members, thus they must be the last member of the parent structure. Contininging in the effort to add `-Wflex-array-member-not-at-end`, put `struct fc_bsg_*` inside a union with the trailing members padded to the size of `struct fc_bsg_*` to silence the warning. This is similar to TRAILING_OVERLAP, exept that the position of the flexible array member is also in a union, causing it to not be the last member of the structure. Suggested-by: John Meneghini <[email protected]> Signed-off-by: Jesse Taube <[email protected]> --- V1 -> V2: - Rewrite V2 -> V3: - Fix commit description V3 -> V4: - Accedentally sent V1 ;( Send correct version. --- drivers/scsi/qla2xxx/qla_edif_bsg.h | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_edif_bsg.h b/drivers/scsi/qla2xxx/qla_edif_bsg.h index 514c265ba86e..2b32a3185629 100644 --- a/drivers/scsi/qla2xxx/qla_edif_bsg.h +++ b/drivers/scsi/qla2xxx/qla_edif_bsg.h @@ -36,16 +36,26 @@ struct extra_auth_els { } __packed; struct qla_bsg_auth_els_request { - struct fc_bsg_request r; - struct extra_auth_els e; + union { + struct fc_bsg_request r; + struct { + unsigned char __fc_bsg_request_sz[sizeof(struct fc_bsg_request)]; + struct extra_auth_els e; + }; + }; }; struct qla_bsg_auth_els_reply { - struct fc_bsg_reply r; - uint32_t rx_xchg_address; - uint8_t version; - uint8_t pad[VND_CMD_PAD_SIZE]; - uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; + union { + struct fc_bsg_reply r; + struct { + unsigned char __fc_bsg_reply_sz[sizeof(struct fc_bsg_reply)]; + uint32_t rx_xchg_address; + uint8_t version; + uint8_t pad[VND_CMD_PAD_SIZE]; + uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; + }; + }; }; struct app_id { -- 2.54.0