diff options
| author | Kees Cook <keescook@chromium.org> | 2021-08-09 11:29:33 -0700 |
|---|---|---|
| committer | Kees Cook <keescook@chromium.org> | 2021-08-10 13:55:55 -0700 |
| commit | 0f28d9daf643a1110bc7536f590e60035ba17635 (patch) | |
| tree | c9c660946062c77fde4cad8a33c0e6cf3d00d8f2 | |
| parent | 8725f84346c1be20ccb21aedb3e46f25e3ab9f3a (diff) | |
| download | linux-0f28d9daf643a1110bc7536f590e60035ba17635.tar.gz | |
treewide: Replace open-coded flex array unions
Many places in the kernel try to have an effective union of typed trailing
flexible arrays, but since the C standard doesn't like this, such structs
stack a zero-element array with a flexible array. This will cause problems
with size checks against such zero-element arrays, so they must all be
converted to "real" flexible array unions using the new helper.
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: "Gustavo A. R. Silva" <gustavoars@kernel.org>
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: bpf@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
| -rw-r--r-- | drivers/crypto/chelsio/chcr_crypto.h | 14 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/htt.h | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlegacy/commands.h | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/dvm/commands.h | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/tx.h | 6 | ||||
| -rw-r--r-- | drivers/scsi/aic94xx/aic94xx_sds.c | 6 | ||||
| -rw-r--r-- | include/linux/filter.h | 6 | ||||
| -rw-r--r-- | include/scsi/sas.h | 12 |
8 files changed, 41 insertions, 21 deletions
diff --git a/drivers/crypto/chelsio/chcr_crypto.h b/drivers/crypto/chelsio/chcr_crypto.h index e89f9e0094b40..332ea73aab898 100644 --- a/drivers/crypto/chelsio/chcr_crypto.h +++ b/drivers/crypto/chelsio/chcr_crypto.h @@ -222,8 +222,10 @@ struct chcr_authenc_ctx { }; struct __aead_ctx { - struct chcr_gcm_ctx gcm[0]; - struct chcr_authenc_ctx authenc[]; + flex_array_union( + struct chcr_gcm_ctx gcm[], + 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[]; + flex_array_union3( + struct hmac_ctx hmacctx[], + struct ablk_ctx ablkctx[], + struct chcr_aead_ctx aeadctx[] + ); }; struct chcr_context { diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h index ec689e3ce48a7..2b67f2c2a4311 100644 --- a/drivers/net/wireless/ath/ath10k/htt.h +++ b/drivers/net/wireless/ath/ath10k/htt.h @@ -1674,8 +1674,10 @@ 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[]; + flex_array_union( + __le32 resp_ids[], /* ath10k_htt_get_tx_fetch_ind_resp_ids() */ + struct htt_tx_fetch_record records[] + ); } __packed; static inline void * diff --git a/drivers/net/wireless/intel/iwlegacy/commands.h b/drivers/net/wireless/intel/iwlegacy/commands.h index 89c6671b32bcb..7a4fdf9d2ffe4 100644 --- a/drivers/net/wireless/intel/iwlegacy/commands.h +++ b/drivers/net/wireless/intel/iwlegacy/commands.h @@ -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[]; + flex_array_union( + u8 payload[], + struct ieee80211_hdr hdr[] + ); } __packed; /* diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/commands.h b/drivers/net/wireless/intel/iwlwifi/dvm/commands.h index 235c7a2e3483f..ee556fb780620 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/commands.h +++ b/drivers/net/wireless/intel/iwlwifi/dvm/commands.h @@ -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[]; + flex_array_union( + u8 payload[], + struct ieee80211_hdr hdr[] + ); } __packed; /* diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h index 24e4a82a55da1..f897ad7a9878e 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h @@ -713,8 +713,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[]; + flex_array_union( + struct iwl_mvm_compressed_ba_ratid ra_tid[], + struct iwl_mvm_compressed_ba_tfd tfd[] + ); } __packed; /* COMPRESSED_BA_RES_API_S_VER_4 */ /** diff --git a/drivers/scsi/aic94xx/aic94xx_sds.c b/drivers/scsi/aic94xx/aic94xx_sds.c index 46815e65f7a45..19ec17de66802 100644 --- a/drivers/scsi/aic94xx/aic94xx_sds.c +++ b/drivers/scsi/aic94xx/aic94xx_sds.c @@ -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[]; + flex_array_union( + struct asd_ms_conn_desc conn_desc[], + struct asd_ms_node_desc node_desc[] + ); } __attribute__ ((packed)); struct asd_ctrla_phy_entry { diff --git a/include/linux/filter.h b/include/linux/filter.h index ff698c9d1c946..21e32f04f5df1 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -588,8 +588,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[]; + flex_array_union( + struct sock_filter insns[], + struct bpf_insn insnsi[] + ); }; struct sk_filter { diff --git a/include/scsi/sas.h b/include/scsi/sas.h index 4726c1bbec659..4e99335e3685a 100644 --- a/include/scsi/sas.h +++ b/include/scsi/sas.h @@ -323,8 +323,10 @@ struct ssp_response_iu { __be32 sense_data_len; __be32 response_data_len; - u8 resp_data[0]; - u8 sense_data[]; + flex_array_union( + u8 resp_data[], + 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[]; + flex_array_union( + u8 resp_data[], + u8 sense_data[] + ); } __attribute__ ((packed)); struct ssp_command_iu { |
