@@ -947,7 +947,7 @@ static void ieee80211_parse_extension_element(u32 *crc,
947947
948948 switch (elem -> data [0 ]) {
949949 case WLAN_EID_EXT_HE_MU_EDCA :
950- if (len = = sizeof (* elems -> mu_edca_param_set )) {
950+ if (len > = sizeof (* elems -> mu_edca_param_set )) {
951951 elems -> mu_edca_param_set = data ;
952952 if (crc )
953953 * crc = crc32_be (* crc , (void * )elem ,
@@ -968,15 +968,15 @@ static void ieee80211_parse_extension_element(u32 *crc,
968968 }
969969 break ;
970970 case WLAN_EID_EXT_UORA :
971- if (len = = 1 )
971+ if (len > = 1 )
972972 elems -> uora_element = data ;
973973 break ;
974974 case WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME :
975975 if (len == 3 )
976976 elems -> max_channel_switch_time = data ;
977977 break ;
978978 case WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION :
979- if (len = = sizeof (* elems -> mbssid_config_ie ))
979+ if (len > = sizeof (* elems -> mbssid_config_ie ))
980980 elems -> mbssid_config_ie = data ;
981981 break ;
982982 case WLAN_EID_EXT_HE_SPR :
@@ -985,7 +985,7 @@ static void ieee80211_parse_extension_element(u32 *crc,
985985 elems -> he_spr = data ;
986986 break ;
987987 case WLAN_EID_EXT_HE_6GHZ_CAPA :
988- if (len = = sizeof (* elems -> he_6ghz_capa ))
988+ if (len > = sizeof (* elems -> he_6ghz_capa ))
989989 elems -> he_6ghz_capa = data ;
990990 break ;
991991 }
@@ -1074,14 +1074,14 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
10741074
10751075 switch (id ) {
10761076 case WLAN_EID_LINK_ID :
1077- if (elen + 2 != sizeof (struct ieee80211_tdls_lnkie )) {
1077+ if (elen + 2 < sizeof (struct ieee80211_tdls_lnkie )) {
10781078 elem_parse_failed = true;
10791079 break ;
10801080 }
10811081 elems -> lnk_id = (void * )(pos - 2 );
10821082 break ;
10831083 case WLAN_EID_CHAN_SWITCH_TIMING :
1084- if (elen != sizeof (struct ieee80211_ch_switch_timing )) {
1084+ if (elen < sizeof (struct ieee80211_ch_switch_timing )) {
10851085 elem_parse_failed = true;
10861086 break ;
10871087 }
@@ -1244,7 +1244,7 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
12441244 elems -> sec_chan_offs = (void * )pos ;
12451245 break ;
12461246 case WLAN_EID_CHAN_SWITCH_PARAM :
1247- if (elen !=
1247+ if (elen <
12481248 sizeof (* elems -> mesh_chansw_params_ie )) {
12491249 elem_parse_failed = true;
12501250 break ;
@@ -1253,7 +1253,7 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
12531253 break ;
12541254 case WLAN_EID_WIDE_BW_CHANNEL_SWITCH :
12551255 if (!action ||
1256- elen != sizeof (* elems -> wide_bw_chansw_ie )) {
1256+ elen < sizeof (* elems -> wide_bw_chansw_ie )) {
12571257 elem_parse_failed = true;
12581258 break ;
12591259 }
@@ -1272,7 +1272,7 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
12721272 ie = cfg80211_find_ie (WLAN_EID_WIDE_BW_CHANNEL_SWITCH ,
12731273 pos , elen );
12741274 if (ie ) {
1275- if (ie [1 ] = = sizeof (* elems -> wide_bw_chansw_ie ))
1275+ if (ie [1 ] > = sizeof (* elems -> wide_bw_chansw_ie ))
12761276 elems -> wide_bw_chansw_ie =
12771277 (void * )(ie + 2 );
12781278 else
@@ -1316,7 +1316,7 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
13161316 elems -> cisco_dtpc_elem = pos ;
13171317 break ;
13181318 case WLAN_EID_ADDBA_EXT :
1319- if (elen != sizeof (struct ieee80211_addba_ext_ie )) {
1319+ if (elen < sizeof (struct ieee80211_addba_ext_ie )) {
13201320 elem_parse_failed = true;
13211321 break ;
13221322 }
@@ -1342,7 +1342,7 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
13421342 elem , elems );
13431343 break ;
13441344 case WLAN_EID_S1G_CAPABILITIES :
1345- if (elen = = sizeof (* elems -> s1g_capab ))
1345+ if (elen > = sizeof (* elems -> s1g_capab ))
13461346 elems -> s1g_capab = (void * )pos ;
13471347 else
13481348 elem_parse_failed = true;
0 commit comments