mac80211: Helper function for marking STA authenticated
Authentication exchange can be completed in both TX and RX paths for SAE, so move this common functionality into a helper function to avoid having to implement practically the same operations in two places when extending SAE implementation in the following commits. Signed-off-by: Jouni Malinen <jouni@codeaurora.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
506dbf90c1
commit
fc107a9330
@ -2761,13 +2761,33 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata,
|
|||||||
auth_data->key_idx, tx_flags);
|
auth_data->key_idx, tx_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool ieee80211_mark_sta_auth(struct ieee80211_sub_if_data *sdata,
|
||||||
|
const u8 *bssid)
|
||||||
|
{
|
||||||
|
struct sta_info *sta;
|
||||||
|
|
||||||
|
/* move station state to auth */
|
||||||
|
mutex_lock(&sdata->local->sta_mtx);
|
||||||
|
sta = sta_info_get(sdata, bssid);
|
||||||
|
if (!sta) {
|
||||||
|
WARN_ONCE(1, "%s: STA %pM not found", sdata->name, bssid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (sta_info_move_state(sta, IEEE80211_STA_AUTH)) {
|
||||||
|
sdata_info(sdata, "failed moving %pM to auth\n", bssid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
mutex_unlock(&sdata->local->sta_mtx);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
||||||
struct ieee80211_mgmt *mgmt, size_t len)
|
struct ieee80211_mgmt *mgmt, size_t len)
|
||||||
{
|
{
|
||||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
u16 auth_alg, auth_transaction, status_code;
|
u16 auth_alg, auth_transaction, status_code;
|
||||||
struct sta_info *sta;
|
|
||||||
struct ieee80211_event event = {
|
struct ieee80211_event event = {
|
||||||
.type = MLME_EVENT,
|
.type = MLME_EVENT,
|
||||||
.u.mlme.data = AUTH_EVENT,
|
.u.mlme.data = AUTH_EVENT,
|
||||||
@ -2850,18 +2870,8 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move station state to auth */
|
if (!ieee80211_mark_sta_auth(sdata, bssid))
|
||||||
mutex_lock(&sdata->local->sta_mtx);
|
|
||||||
sta = sta_info_get(sdata, bssid);
|
|
||||||
if (!sta) {
|
|
||||||
WARN_ONCE(1, "%s: STA %pM not found", sdata->name, bssid);
|
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
|
||||||
if (sta_info_move_state(sta, IEEE80211_STA_AUTH)) {
|
|
||||||
sdata_info(sdata, "failed moving %pM to auth\n", bssid);
|
|
||||||
goto out_err;
|
|
||||||
}
|
|
||||||
mutex_unlock(&sdata->local->sta_mtx);
|
|
||||||
|
|
||||||
cfg80211_rx_mlme_mgmt(sdata->dev, (u8 *)mgmt, len);
|
cfg80211_rx_mlme_mgmt(sdata->dev, (u8 *)mgmt, len);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user