realtek: consistently flood RMA frames
[openwrt/staging/dedeckeh.git] / package / kernel / mac80211 / patches / subsys / 348-mac80211-mlme-find-auth-challenge-directly.patch
1 From: Johannes Berg <johannes.berg@intel.com>
2 Date: Mon, 20 Sep 2021 15:40:09 +0200
3 Subject: [PATCH] mac80211: mlme: find auth challenge directly
4
5 commit 49a765d6785e99157ff5091cc37485732496864e upstream.
6
7 There's no need to parse all elements etc. just to find the
8 authentication challenge - use cfg80211_find_elem() instead.
9 This also allows us to remove WLAN_EID_CHALLENGE handling
10 from the element parsing entirely.
11
12 Link: https://lore.kernel.org/r/20210920154009.45f9b3a15722.Ice3159ffad03a007d6154cbf1fb3a8c48489e86f@changeid
13 Signed-off-by: Johannes Berg <johannes.berg@intel.com>
14 ---
15
16 --- a/net/mac80211/ieee80211_i.h
17 +++ b/net/mac80211/ieee80211_i.h
18 @@ -1540,7 +1540,6 @@ struct ieee802_11_elems {
19 const u8 *supp_rates;
20 const u8 *ds_params;
21 const struct ieee80211_tim_ie *tim;
22 - const u8 *challenge;
23 const u8 *rsn;
24 const u8 *rsnx;
25 const u8 *erp_info;
26 @@ -1594,7 +1593,6 @@ struct ieee802_11_elems {
27 u8 ssid_len;
28 u8 supp_rates_len;
29 u8 tim_len;
30 - u8 challenge_len;
31 u8 rsn_len;
32 u8 rsnx_len;
33 u8 ext_supp_rates_len;
34 --- a/net/mac80211/mlme.c
35 +++ b/net/mac80211/mlme.c
36 @@ -2889,17 +2889,17 @@ static void ieee80211_auth_challenge(str
37 {
38 struct ieee80211_local *local = sdata->local;
39 struct ieee80211_mgd_auth_data *auth_data = sdata->u.mgd.auth_data;
40 + const struct element *challenge;
41 u8 *pos;
42 - struct ieee802_11_elems elems;
43 u32 tx_flags = 0;
44 struct ieee80211_prep_tx_info info = {
45 .subtype = IEEE80211_STYPE_AUTH,
46 };
47
48 pos = mgmt->u.auth.variable;
49 - ieee802_11_parse_elems(pos, len - (pos - (u8 *)mgmt), false, &elems,
50 - mgmt->bssid, auth_data->bss->bssid);
51 - if (!elems.challenge)
52 + challenge = cfg80211_find_elem(WLAN_EID_CHALLENGE, pos,
53 + len - (pos - (u8 *)mgmt));
54 + if (!challenge)
55 return;
56 auth_data->expected_transaction = 4;
57 drv_mgd_prepare_tx(sdata->local, sdata, &info);
58 @@ -2907,7 +2907,8 @@ static void ieee80211_auth_challenge(str
59 tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS |
60 IEEE80211_TX_INTFL_MLME_CONN_TX;
61 ieee80211_send_auth(sdata, 3, auth_data->algorithm, 0,
62 - elems.challenge - 2, elems.challenge_len + 2,
63 + (void *)challenge,
64 + challenge->datalen + sizeof(*challenge),
65 auth_data->bss->bssid, auth_data->bss->bssid,
66 auth_data->key, auth_data->key_len,
67 auth_data->key_idx, tx_flags);
68 --- a/net/mac80211/util.c
69 +++ b/net/mac80211/util.c
70 @@ -1120,10 +1120,6 @@ _ieee802_11_parse_elems_crc(const u8 *st
71 } else
72 elem_parse_failed = true;
73 break;
74 - case WLAN_EID_CHALLENGE:
75 - elems->challenge = pos;
76 - elems->challenge_len = elen;
77 - break;
78 case WLAN_EID_VENDOR_SPECIFIC:
79 if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
80 pos[2] == 0xf2) {