ath10k: Replace zero-length array with flexible-array
The current codebase makes use of the zero-length array language
extension to the C90 standard, but the preferred mechanism to declare
variable-length types such as these ones is a flexible array member[1][2],
introduced in C99:
struct foo {
int stuff;
struct boo array[];
};
By making use of the mechanism above, we will get a compiler warning
in case the flexible array does not occur last in the structure, which
will help us prevent some kind of undefined behavior bugs from being
inadvertently introduced[3] to the codebase from now on.
Also, notice that, dynamic memory allocations won't be affected by
this change:
"Flexible array members have incomplete type, and so the sizeof operator
may not be applied. As a quirk of the original implementation of
zero-length arrays, sizeof evaluates to zero."[1]
sizeof(flexible-array-member) triggers a warning because flexible array
members have incomplete type[1]. There are some instances of code in
which the sizeof operator is being incorrectly/erroneously applied to
zero-length arrays and the result is zero. Such instances may be hiding
some bugs. So, this work (flexible-array member conversions) will also
help to get completely rid of those sorts of issues.
This issue was found with the help of Coccinelle.
[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
[2] https://github.com/KSPP/linux/issues/21
[3] commit 7649773293
("cxgb3/l2t: Fix undefined behaviour")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200507041127.GA31587@embeddedor
This commit is contained in:

committed by
Kalle Valo

parent
27143fa93c
commit
d3ed0cf047
@@ -2292,7 +2292,7 @@ struct wmi_service_ready_event {
|
||||
* where FW can access this memory directly (or) by DMA.
|
||||
*/
|
||||
__le32 num_mem_reqs;
|
||||
struct wlan_host_mem_req mem_reqs[0];
|
||||
struct wlan_host_mem_req mem_reqs[];
|
||||
} __packed;
|
||||
|
||||
/* This is the definition from 10.X firmware branch */
|
||||
@@ -2331,7 +2331,7 @@ struct wmi_10x_service_ready_event {
|
||||
*/
|
||||
__le32 num_mem_reqs;
|
||||
|
||||
struct wlan_host_mem_req mem_reqs[0];
|
||||
struct wlan_host_mem_req mem_reqs[];
|
||||
} __packed;
|
||||
|
||||
#define WMI_SERVICE_READY_TIMEOUT_HZ (5 * HZ)
|
||||
@@ -3086,19 +3086,19 @@ struct wmi_chan_list_entry {
|
||||
struct wmi_chan_list {
|
||||
__le32 tag; /* WMI_CHAN_LIST_TAG */
|
||||
__le32 num_chan;
|
||||
struct wmi_chan_list_entry channel_list[0];
|
||||
struct wmi_chan_list_entry channel_list[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_bssid_list {
|
||||
__le32 tag; /* WMI_BSSID_LIST_TAG */
|
||||
__le32 num_bssid;
|
||||
struct wmi_mac_addr bssid_list[0];
|
||||
struct wmi_mac_addr bssid_list[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_ie_data {
|
||||
__le32 tag; /* WMI_IE_TAG */
|
||||
__le32 ie_len;
|
||||
u8 ie_data[0];
|
||||
u8 ie_data[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_ssid {
|
||||
@@ -3109,7 +3109,7 @@ struct wmi_ssid {
|
||||
struct wmi_ssid_list {
|
||||
__le32 tag; /* WMI_SSID_LIST_TAG */
|
||||
__le32 num_ssids;
|
||||
struct wmi_ssid ssids[0];
|
||||
struct wmi_ssid ssids[];
|
||||
} __packed;
|
||||
|
||||
/* prefix used by scan requestor ids on the host */
|
||||
@@ -3311,7 +3311,7 @@ struct wmi_stop_scan_arg {
|
||||
|
||||
struct wmi_scan_chan_list_cmd {
|
||||
__le32 num_scan_chans;
|
||||
struct wmi_channel chan_info[0];
|
||||
struct wmi_channel chan_info[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_scan_chan_list_arg {
|
||||
@@ -3395,12 +3395,12 @@ struct wmi_mgmt_rx_hdr_v2 {
|
||||
|
||||
struct wmi_mgmt_rx_event_v1 {
|
||||
struct wmi_mgmt_rx_hdr_v1 hdr;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_mgmt_rx_event_v2 {
|
||||
struct wmi_mgmt_rx_hdr_v2 hdr;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_10_4_mgmt_rx_hdr {
|
||||
@@ -3415,7 +3415,7 @@ struct wmi_10_4_mgmt_rx_hdr {
|
||||
|
||||
struct wmi_10_4_mgmt_rx_event {
|
||||
struct wmi_10_4_mgmt_rx_hdr hdr;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_mgmt_rx_ext_info {
|
||||
@@ -3455,14 +3455,14 @@ struct wmi_phyerr {
|
||||
__le32 rssi_chains[4];
|
||||
__le16 nf_chains[4];
|
||||
__le32 buf_len;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_phyerr_event {
|
||||
__le32 num_phyerrs;
|
||||
__le32 tsf_l32;
|
||||
__le32 tsf_u32;
|
||||
struct wmi_phyerr phyerrs[0];
|
||||
struct wmi_phyerr phyerrs[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_10_4_phyerr_event {
|
||||
@@ -3479,7 +3479,7 @@ struct wmi_10_4_phyerr_event {
|
||||
__le32 phy_err_mask[2];
|
||||
__le32 tsf_timestamp;
|
||||
__le32 buf_len;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_radar_found_info {
|
||||
@@ -3592,7 +3592,7 @@ struct wmi_mgmt_tx_hdr {
|
||||
|
||||
struct wmi_mgmt_tx_cmd {
|
||||
struct wmi_mgmt_tx_hdr hdr;
|
||||
u8 buf[0];
|
||||
u8 buf[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_echo_event {
|
||||
@@ -4628,7 +4628,7 @@ struct wmi_stats_event {
|
||||
* By having a zero sized array, the pointer to data area
|
||||
* becomes available without increasing the struct size
|
||||
*/
|
||||
u8 data[0];
|
||||
u8 data[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_10_2_stats_event {
|
||||
@@ -4638,7 +4638,7 @@ struct wmi_10_2_stats_event {
|
||||
__le32 num_vdev_stats;
|
||||
__le32 num_peer_stats;
|
||||
__le32 num_bcnflt_stats;
|
||||
u8 data[0];
|
||||
u8 data[];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
@@ -5033,7 +5033,7 @@ struct wmi_vdev_install_key_cmd {
|
||||
__le32 key_rxmic_len;
|
||||
|
||||
/* contains key followed by tx mic followed by rx mic */
|
||||
u8 key_data[0];
|
||||
u8 key_data[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_vdev_install_key_arg {
|
||||
@@ -5703,7 +5703,7 @@ struct wmi_bcn_tx_hdr {
|
||||
|
||||
struct wmi_bcn_tx_cmd {
|
||||
struct wmi_bcn_tx_hdr hdr;
|
||||
u8 *bcn[0];
|
||||
u8 *bcn[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_bcn_tx_arg {
|
||||
@@ -6120,7 +6120,7 @@ struct wmi_bcn_info {
|
||||
|
||||
struct wmi_host_swba_event {
|
||||
__le32 vdev_map;
|
||||
struct wmi_bcn_info bcn_info[0];
|
||||
struct wmi_bcn_info bcn_info[];
|
||||
} __packed;
|
||||
|
||||
struct wmi_10_2_4_bcn_info {
|
||||
@@ -6130,7 +6130,7 @@ struct wmi_10_2_4_bcn_info {
|
||||
|
||||
struct wmi_10_2_4_host_swba_event {
|
||||
__le32 vdev_map;
|
||||
struct wmi_10_2_4_bcn_info bcn_info[0];
|
||||
struct wmi_10_2_4_bcn_info bcn_info[];
|
||||
} __packed;
|
||||
|
||||
/* 16 words = 512 client + 1 word = for guard */
|
||||
@@ -6171,7 +6171,7 @@ struct wmi_10_4_bcn_info {
|
||||
|
||||
struct wmi_10_4_host_swba_event {
|
||||
__le32 vdev_map;
|
||||
struct wmi_10_4_bcn_info bcn_info[0];
|
||||
struct wmi_10_4_bcn_info bcn_info[];
|
||||
} __packed;
|
||||
|
||||
#define WMI_MAX_AP_VDEV 16
|
||||
|
Reference in New Issue
Block a user