There is a regular need in the kernel to provide a way to declare
having a dynamically sized set of trailing elements in a structure.
Kernel code should always use “flexible array members”[1] for these
cases. The older style of one-element or zero-length arrays should
no longer be used[2].
[1] https://en.wikipedia.org/wiki/Flexible_array_member
[2] https://www.kernel.org/doc/html/v5.16/process/deprecated.html#zero-length-and-one-element-arrays
Link: https://github.com/KSPP/linux/issues/78
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20220216194836.GA904035@embeddedor
        u32 hal_ring_id;
 
        /* keep last */
-       struct sk_buff *skb[0];
+       struct sk_buff *skb[];
 };
 
 struct ath11k_ce_pipe {
 
        } id;
 
        /* must be last */
-       u8 drv_priv[0] __aligned(sizeof(void *));
+       u8 drv_priv[] __aligned(sizeof(void *));
 };
 
 struct ath11k_fw_stats_pdev {
 
        u32 ppdu_id;
        u32 timestamp;
        u32 rsvd;
-       u8 data[0];
+       u8 data[];
 } __packed;
 
 struct htt_tlv {
        u32 header;
-       u8 value[0];
+       u8 value[];
 } __packed;
 
 #define HTT_TLV_TAG                    GENMASK(11, 0)
         * tx_ppdu_stats_info is variable length, with length =
         *     number_of_ppdu_stats * sizeof (struct htt_tx_ppdu_stats_info)
         */
-       struct htt_tx_ppdu_stats_info tx_ppdu_info[0];
+       struct htt_tx_ppdu_stats_info tx_ppdu_info[];
 } __packed;
 
 struct htt_ppdu_user_stats {
  */
 struct htt_pktlog_msg {
        u32 hdr;
-       u8 payload[0];
+       u8 payload[];
 };
 
 /**
        u32 info0;
        u64 cookie;
        u32 info1;
-       u8 data[0];
+       u8 data[];
 } __packed;
 
 #define        HTT_MAC_ADDR_L32_0      GENMASK(7, 0)
 
        __le32 hdr_status_tag;
        __le32 phy_ppdu_id;
        u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN];
-       u8 msdu_payload[0];
+       u8 msdu_payload[];
 } __packed;
 
 struct hal_rx_desc_qcn9074 {
        __le32 hdr_status_tag;
        __le32 phy_ppdu_id;
        u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN];
-       u8 msdu_payload[0];
+       u8 msdu_payload[];
 } __packed;
 
 struct hal_rx_desc_wcn6855 {
        __le32 hdr_status_tag;
        __le32 phy_ppdu_id;
        u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN];
-       u8 msdu_payload[0];
+       u8 msdu_payload[];
 } __packed;
 
 struct hal_rx_desc {
 
        __le32 info1;
        __le32 info2;
        __le32 reserve0;
-       u8 bins[0];
+       u8 bins[];
 } __packed;
 
 struct ath11k_spectral_search_report {