treewide: Replace open-coded flex arrays in unions
In support of enabling -Warray-bounds and -Wzero-length-bounds and correctly handling run-time memcpy() bounds checking, replace all open-coded flexible arrays (i.e. 0-element arrays) in unions with the DECLARE_FLEX_ARRAY() helper macro. This fixes warnings such as: fs/hpfs/anode.c: In function 'hpfs_add_sector_to_btree': fs/hpfs/anode.c:209:27: warning: array subscript 0 is outside the bounds of an interior zero-length array 'struct bplus_internal_node[0]' [-Wzero-length-bounds] 209 | anode->btree.u.internal[0].down = cpu_to_le32(a); | ~~~~~~~~~~~~~~~~~~~~~~~^~~ In file included from fs/hpfs/hpfs_fn.h:26, from fs/hpfs/anode.c:10: fs/hpfs/hpfs.h:412:32: note: while referencing 'internal' 412 | struct bplus_internal_node internal[0]; /* (internal) 2-word entries giving | ^~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_fd.c: In function 'es58x_fd_tx_can_msg': drivers/net/can/usb/etas_es58x/es58x_fd.c:360:35: warning: array subscript 65535 is outside the bounds of an interior zero-length array 'u8[0]' {aka 'unsigned char[]'} [-Wzero-length-bounds] 360 | tx_can_msg = (typeof(tx_can_msg))&es58x_fd_urb_cmd->raw_msg[msg_len]; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from drivers/net/can/usb/etas_es58x/es58x_core.h:22, from drivers/net/can/usb/etas_es58x/es58x_fd.c:17: drivers/net/can/usb/etas_es58x/es58x_fd.h:231:6: note: while referencing 'raw_msg' 231 | u8 raw_msg[0]; | ^~~~~~~ Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Ayush Sawal <ayush.sawal@chelsio.com> Cc: Vinay Kumar Yadav <vinay.yadav@chelsio.com> Cc: Rohit Maheshwari <rohitm@chelsio.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: "David S. Miller" <davem@davemloft.net> Cc: Kalle Valo <kvalo@codeaurora.org> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Stanislaw Gruszka <stf_xl@wp.pl> Cc: Luca Coelho <luciano.coelho@intel.com> Cc: "James E.J. Bottomley" <jejb@linux.ibm.com> Cc: "Martin K. Petersen" <martin.petersen@oracle.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: Andrii Nakryiko <andrii@kernel.org> Cc: Martin KaFai Lau <kafai@fb.com> Cc: Song Liu <songliubraving@fb.com> Cc: Yonghong Song <yhs@fb.com> Cc: John Fastabend <john.fastabend@gmail.com> Cc: KP Singh <kpsingh@kernel.org> Cc: Johannes Berg <johannes.berg@intel.com> Cc: Mordechay Goodstein <mordechay.goodstein@intel.com> Cc: Lee Jones <lee.jones@linaro.org> Cc: Wolfgang Grandegger <wg@grandegger.com> Cc: Marc Kleine-Budde <mkl@pengutronix.de> Cc: Arunachalam Santhanam <arunachalam.santhanam@in.bosch.com> Cc: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Cc: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> Cc: linux-crypto@vger.kernel.org Cc: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org Cc: linux-scsi@vger.kernel.org Cc: linux-can@vger.kernel.org Cc: bpf@vger.kernel.org Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> # drivers/net/can/usb/etas_es58x/* Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
3080ea5553
commit
fa7845cfd5
|
@ -222,8 +222,10 @@ struct chcr_authenc_ctx {
|
|||
};
|
||||
|
||||
struct __aead_ctx {
|
||||
struct chcr_gcm_ctx gcm[0];
|
||||
struct chcr_authenc_ctx authenc[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct chcr_gcm_ctx, gcm);
|
||||
DECLARE_FLEX_ARRAY(struct chcr_authenc_ctx, authenc);
|
||||
};
|
||||
};
|
||||
|
||||
struct chcr_aead_ctx {
|
||||
|
@ -245,9 +247,11 @@ struct hmac_ctx {
|
|||
};
|
||||
|
||||
struct __crypto_ctx {
|
||||
struct hmac_ctx hmacctx[0];
|
||||
struct ablk_ctx ablkctx[0];
|
||||
struct chcr_aead_ctx aeadctx[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct hmac_ctx, hmacctx);
|
||||
DECLARE_FLEX_ARRAY(struct ablk_ctx, ablkctx);
|
||||
DECLARE_FLEX_ARRAY(struct chcr_aead_ctx, aeadctx);
|
||||
};
|
||||
};
|
||||
|
||||
struct chcr_context {
|
||||
|
|
|
@ -192,7 +192,7 @@ struct es581_4_urb_cmd {
|
|||
struct es581_4_rx_cmd_ret rx_cmd_ret;
|
||||
__le64 timestamp;
|
||||
u8 rx_cmd_ret_u8;
|
||||
u8 raw_msg[0];
|
||||
DECLARE_FLEX_ARRAY(u8, raw_msg);
|
||||
} __packed;
|
||||
|
||||
__le16 reserved_for_crc16_do_not_use;
|
||||
|
|
|
@ -219,7 +219,7 @@ struct es58x_fd_urb_cmd {
|
|||
struct es58x_fd_tx_ack_msg tx_ack_msg;
|
||||
__le64 timestamp;
|
||||
__le32 rx_cmd_ret_le32;
|
||||
u8 raw_msg[0];
|
||||
DECLARE_FLEX_ARRAY(u8, raw_msg);
|
||||
} __packed;
|
||||
|
||||
__le16 reserved_for_crc16_do_not_use;
|
||||
|
|
|
@ -1674,8 +1674,11 @@ struct htt_tx_fetch_ind {
|
|||
__le32 token;
|
||||
__le16 num_resp_ids;
|
||||
__le16 num_records;
|
||||
__le32 resp_ids[0]; /* ath10k_htt_get_tx_fetch_ind_resp_ids() */
|
||||
struct htt_tx_fetch_record records[];
|
||||
union {
|
||||
/* ath10k_htt_get_tx_fetch_ind_resp_ids() */
|
||||
DECLARE_FLEX_ARRAY(__le32, resp_ids);
|
||||
DECLARE_FLEX_ARRAY(struct htt_tx_fetch_record, records);
|
||||
};
|
||||
} __packed;
|
||||
|
||||
static inline void *
|
||||
|
|
|
@ -1408,8 +1408,10 @@ struct il3945_tx_cmd {
|
|||
* MAC header goes here, followed by 2 bytes padding if MAC header
|
||||
* length is 26 or 30 bytes, followed by payload data
|
||||
*/
|
||||
u8 payload[0];
|
||||
struct ieee80211_hdr hdr[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(u8, payload);
|
||||
DECLARE_FLEX_ARRAY(struct ieee80211_hdr, hdr);
|
||||
};
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
|
|
|
@ -1251,8 +1251,10 @@ struct iwl_tx_cmd {
|
|||
* MAC header goes here, followed by 2 bytes padding if MAC header
|
||||
* length is 26 or 30 bytes, followed by payload data
|
||||
*/
|
||||
u8 payload[0];
|
||||
struct ieee80211_hdr hdr[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(u8, payload);
|
||||
DECLARE_FLEX_ARRAY(struct ieee80211_hdr, hdr);
|
||||
};
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
|
|
|
@ -239,8 +239,10 @@ struct iwl_tx_cmd {
|
|||
u8 tid_tspec;
|
||||
__le16 pm_frame_timeout;
|
||||
__le16 reserved4;
|
||||
u8 payload[0];
|
||||
struct ieee80211_hdr hdr[0];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(u8, payload);
|
||||
DECLARE_FLEX_ARRAY(struct ieee80211_hdr, hdr);
|
||||
};
|
||||
} __packed; /* TX_CMD_API_S_VER_6 */
|
||||
|
||||
struct iwl_dram_sec_info {
|
||||
|
@ -713,8 +715,10 @@ struct iwl_mvm_compressed_ba_notif {
|
|||
__le32 tx_rate;
|
||||
__le16 tfd_cnt;
|
||||
__le16 ra_tid_cnt;
|
||||
struct iwl_mvm_compressed_ba_ratid ra_tid[0];
|
||||
struct iwl_mvm_compressed_ba_tfd tfd[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct iwl_mvm_compressed_ba_ratid, ra_tid);
|
||||
DECLARE_FLEX_ARRAY(struct iwl_mvm_compressed_ba_tfd, tfd);
|
||||
};
|
||||
} __packed; /* COMPRESSED_BA_RES_API_S_VER_4 */
|
||||
|
||||
/**
|
||||
|
|
|
@ -517,8 +517,10 @@ struct asd_ms_conn_map {
|
|||
u8 num_nodes;
|
||||
u8 usage_model_id;
|
||||
u32 _resvd;
|
||||
struct asd_ms_conn_desc conn_desc[0];
|
||||
struct asd_ms_node_desc node_desc[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct asd_ms_conn_desc, conn_desc);
|
||||
DECLARE_FLEX_ARRAY(struct asd_ms_node_desc, node_desc);
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct asd_ctrla_phy_entry {
|
||||
|
|
|
@ -409,10 +409,10 @@ struct bplus_header
|
|||
__le16 first_free; /* offset from start of header to
|
||||
first free node in array */
|
||||
union {
|
||||
struct bplus_internal_node internal[0]; /* (internal) 2-word entries giving
|
||||
subtree pointers */
|
||||
struct bplus_leaf_node external[0]; /* (external) 3-word entries giving
|
||||
sector runs */
|
||||
/* (internal) 2-word entries giving subtree pointers */
|
||||
DECLARE_FLEX_ARRAY(struct bplus_internal_node, internal);
|
||||
/* (external) 3-word entries giving sector runs */
|
||||
DECLARE_FLEX_ARRAY(struct bplus_leaf_node, external);
|
||||
} u;
|
||||
};
|
||||
|
||||
|
|
|
@ -586,8 +586,10 @@ struct bpf_prog {
|
|||
struct bpf_prog_aux *aux; /* Auxiliary fields */
|
||||
struct sock_fprog_kern *orig_prog; /* Original BPF program */
|
||||
/* Instructions for interpreter */
|
||||
struct sock_filter insns[0];
|
||||
struct bpf_insn insnsi[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct sock_filter, insns);
|
||||
DECLARE_FLEX_ARRAY(struct bpf_insn, insnsi);
|
||||
};
|
||||
};
|
||||
|
||||
struct sk_filter {
|
||||
|
|
|
@ -323,8 +323,10 @@ struct ssp_response_iu {
|
|||
__be32 sense_data_len;
|
||||
__be32 response_data_len;
|
||||
|
||||
u8 resp_data[0];
|
||||
u8 sense_data[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(u8, resp_data);
|
||||
DECLARE_FLEX_ARRAY(u8, sense_data);
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct ssp_command_iu {
|
||||
|
@ -554,8 +556,10 @@ struct ssp_response_iu {
|
|||
__be32 sense_data_len;
|
||||
__be32 response_data_len;
|
||||
|
||||
u8 resp_data[0];
|
||||
u8 sense_data[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(u8, resp_data);
|
||||
DECLARE_FLEX_ARRAY(u8, sense_data);
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct ssp_command_iu {
|
||||
|
|
|
@ -141,8 +141,8 @@ struct rxe_dma_info {
|
|||
__u32 sge_offset;
|
||||
__u32 reserved;
|
||||
union {
|
||||
__u8 inline_data[0];
|
||||
struct rxe_sge sge[0];
|
||||
__DECLARE_FLEX_ARRAY(__u8, inline_data);
|
||||
__DECLARE_FLEX_ARRAY(struct rxe_sge, sge);
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -240,8 +240,8 @@ struct snd_soc_tplg_vendor_array {
|
|||
struct snd_soc_tplg_private {
|
||||
__le32 size; /* in bytes of private data */
|
||||
union {
|
||||
char data[0];
|
||||
struct snd_soc_tplg_vendor_array array[0];
|
||||
__DECLARE_FLEX_ARRAY(char, data);
|
||||
__DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_array, array);
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
|
|
Loading…
Reference in New Issue