mac80211: mlme: find auth challenge directly
[platform/kernel/linux-rpi.git] / net / mac80211 / mlme.c
index 4414e82..548cd14 100644 (file)
@@ -2889,17 +2889,17 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata,
 {
        struct ieee80211_local *local = sdata->local;
        struct ieee80211_mgd_auth_data *auth_data = sdata->u.mgd.auth_data;
+       const struct element *challenge;
        u8 *pos;
-       struct ieee802_11_elems elems;
        u32 tx_flags = 0;
        struct ieee80211_prep_tx_info info = {
                .subtype = IEEE80211_STYPE_AUTH,
        };
 
        pos = mgmt->u.auth.variable;
-       ieee802_11_parse_elems(pos, len - (pos - (u8 *)mgmt), false, &elems,
-                              mgmt->bssid, auth_data->bss->bssid);
-       if (!elems.challenge)
+       challenge = cfg80211_find_elem(WLAN_EID_CHALLENGE, pos,
+                                      len - (pos - (u8 *)mgmt));
+       if (!challenge)
                return;
        auth_data->expected_transaction = 4;
        drv_mgd_prepare_tx(sdata->local, sdata, &info);
@@ -2907,7 +2907,8 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata,
                tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS |
                           IEEE80211_TX_INTFL_MLME_CONN_TX;
        ieee80211_send_auth(sdata, 3, auth_data->algorithm, 0,
-                           elems.challenge - 2, elems.challenge_len + 2,
+                           (void *)challenge,
+                           challenge->datalen + sizeof(*challenge),
                            auth_data->bss->bssid, auth_data->bss->bssid,
                            auth_data->key, auth_data->key_len,
                            auth_data->key_idx, tx_flags);