3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-30 06:02:39 +01:00

ap: Reorder ap_assoc_req_cb, fix comment

Set all the new field values into struct sta_state only after all the
error checks for better readabilty and fixing a possible issue if we
did "sta->rates = rates" and then detected en error and freed "rates".
Also update a comment which I think used the wording from 802.11-2012
instead of 802.11-2016.
This commit is contained in:
Andrew Zaborowski 2017-09-30 04:28:09 +02:00 committed by Denis Kenzior
parent 3d9cbdb6f6
commit 9d05a6ddb7

View File

@ -855,9 +855,6 @@ static void ap_assoc_req_cb(struct netdev *netdev,
if (sta->assoc_resp_cmd_id) if (sta->assoc_resp_cmd_id)
return; return;
sta->capability = req->capability;
sta->listen_interval = L_LE16_TO_CPU(req->listen_interval);
ie_tlv_iter_init(&iter, req->ies, body_len - sizeof(*req)); ie_tlv_iter_init(&iter, req->ies, body_len - sizeof(*req));
while (ie_tlv_iter_next(&iter)) while (ie_tlv_iter_next(&iter))
@ -893,12 +890,7 @@ static void ap_assoc_req_cb(struct netdev *netdev,
goto bad_frame; goto bad_frame;
} }
if (sta->rates) if (!ap_common_rates(ap->rates, rates)) {
l_uintset_free(sta->rates);
sta->rates = rates;
if (!ap_common_rates(ap->rates, sta->rates)) {
err = MMPDU_REASON_CODE_UNSPECIFIED; err = MMPDU_REASON_CODE_UNSPECIFIED;
goto unsupported; goto unsupported;
} }
@ -918,12 +910,6 @@ static void ap_assoc_req_cb(struct netdev *netdev,
goto unsupported; goto unsupported;
} }
if (sta->assoc_rsne)
l_free(sta->assoc_rsne);
sta->assoc_rsne = l_memdup(rsn, rsn_len);
sta->assoc_rsne_len = rsn_len;
/* /*
* Everything fine so far, assign an AID, send response. According * Everything fine so far, assign an AID, send response. According
* to 802.11-2016 11.3.5.3 l) we will only go to State 3 * to 802.11-2016 11.3.5.3 l) we will only go to State 3
@ -932,6 +918,24 @@ static void ap_assoc_req_cb(struct netdev *netdev,
*/ */
sta->aid = ++ap->last_aid; sta->aid = ++ap->last_aid;
sta->capability = req->capability;
sta->listen_interval = L_LE16_TO_CPU(req->listen_interval);
if (sta->rates)
l_uintset_free(sta->rates);
sta->rates = rates;
if (sta->assoc_rsne)
l_free(sta->assoc_rsne);
sta->assoc_rsne = l_memdup(rsn, rsn_len);
sta->assoc_rsne_len = rsn_len;
/* 802.11-2016 11.3.5.3 j) */
if (sta->rsna)
ap_drop_rsna(ap, sta);
sta->assoc_resp_cmd_id = ap_assoc_resp(ap, sta, sta->addr, sta->aid, 0, sta->assoc_resp_cmd_id = ap_assoc_resp(ap, sta, sta->addr, sta->aid, 0,
ap_success_assoc_resp_cb); ap_success_assoc_resp_cb);
if (!sta->assoc_resp_cmd_id) if (!sta->assoc_resp_cmd_id)
@ -944,10 +948,12 @@ bad_frame:
/* /*
* TODO: MFP * TODO: MFP
* *
* 802.11-2016 11.3.5.3 j) * 802.11-2016 11.3.5.3 m)
* "if management frame protection is in use the state for the STA * "If the ResultCode in the MLME-ASSOCIATE.response primitive is
* shall be left unchanged. and if management frame protection is * not SUCCESS and management frame protection is in use the state
* not in use set to State 3 if it was in State 4." * for the STA shall be left unchanged. If the ResultCode is not
* SUCCESS and management frame protection is not in use the state
* for the STA shall be set to State 3 if it was State 4."
* *
* For now, we need to drop the RSNA. * For now, we need to drop the RSNA.
*/ */