Skip to content

Commit 4fed494

Browse files
juerghKalle Valo
authored andcommitted
wifi: brcmfmac: Replace 1-element arrays with flexible arrays
Since commit 2d47c69 ("ubsan: Tighten UBSAN_BOUNDS on GCC"), UBSAN_BOUNDS no longer pretends 1-element arrays are unbounded. Walking 'element' and 'channel_list' will trigger warnings, so make them proper flexible arrays. False positive warnings were: UBSAN: array-index-out-of-bounds in drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:6984:20 index 1 is out of range for type '__le32 [1]' UBSAN: array-index-out-of-bounds in drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:1126:27 index 1 is out of range for type '__le16 [1]' for these lines of code: 6884 ch.chspec = (u16)le32_to_cpu(list->element[i]); 1126 params_le->channel_list[i] = cpu_to_le16(chanspec); Cc: [email protected] # 6.5+ Signed-off-by: Juerg Haefliger <[email protected]> Reviewed-by: Kees Cook <[email protected]> Reviewed-by: Gustavo A. R. Silva <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent aef7a03 commit 4fed494

File tree

1 file changed

+7
-2
lines changed
  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

1 file changed

+7
-2
lines changed

drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,12 @@ struct brcmf_scan_params_v2_le {
442442
* fixed parameter portion is assumed, otherwise
443443
* ssid in the fixed portion is ignored
444444
*/
445-
__le16 channel_list[1]; /* list of chanspecs */
445+
union {
446+
__le16 padding; /* Reserve space for at least 1 entry for abort
447+
* which uses an on stack brcmf_scan_params_v2_le
448+
*/
449+
DECLARE_FLEX_ARRAY(__le16, channel_list); /* chanspecs */
450+
};
446451
};
447452

448453
struct brcmf_scan_results {
@@ -702,7 +707,7 @@ struct brcmf_sta_info_le {
702707

703708
struct brcmf_chanspec_list {
704709
__le32 count; /* # of entries */
705-
__le32 element[1]; /* variable length uint32 list */
710+
__le32 element[]; /* variable length uint32 list */
706711
};
707712

708713
/*

0 commit comments

Comments
 (0)