mac80211: Helper function for marking STA authenticated
authorJouni Malinen <jouni@codeaurora.org>
Wed, 10 Oct 2018 21:21:19 +0000 (00:21 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 11 Oct 2018 14:01:05 +0000 (16:01 +0200)
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>
net/mac80211/mlme.c

index 89dac799a85ff6026e1bebfab419f8dfe5211e3f..2d3ec0156780eb0490a2d81a15bd5d1e0e0f684e 100644 (file)
@@ -2761,13 +2761,33 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata,
                            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,
                                   struct ieee80211_mgmt *mgmt, size_t len)
 {
        struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
        u8 bssid[ETH_ALEN];
        u16 auth_alg, auth_transaction, status_code;
-       struct sta_info *sta;
        struct ieee80211_event event = {
                .type = MLME_EVENT,
                .u.mlme.data = AUTH_EVENT,
@@ -2850,18 +2870,8 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
                return;
        }
 
-       /* 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);
+       if (!ieee80211_mark_sta_auth(sdata, bssid))
                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);
        return;