]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
staging: r8188eu: simplify err handling for unknown station
authorMartin Kaiser <martin@kaiser.cx>
Tue, 29 Nov 2022 20:51:52 +0000 (21:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 5 Dec 2022 12:29:07 +0000 (13:29 +0100)
If we receive a disassoc message from an unknown station, we can drop this
message immediately. Reorder the code to make this clearer.

Tested-by: Philipp Hortmann <philipp.g.hortmann@gmail.com> # Edimax N150
Signed-off-by: Martin Kaiser <martin@kaiser.cx>
Link: https://lore.kernel.org/r/20221129205152.128172-6-martin@kaiser.cx
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/r8188eu/core/rtw_mlme_ext.c

index d5c9eb52fb0e498b9216dd2ba8d894172c0a9bd8..49e0b50b1243e74644fe32ddfc30ed4be3266443 100644 (file)
@@ -1435,6 +1435,7 @@ static void OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;
        struct sta_info *psta;
        struct sta_priv *pstapriv = &padapter->stapriv;
+       u8 updated = 0;
 
        if (memcmp(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
                return;
@@ -1453,19 +1454,18 @@ static void OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
        }
 
        psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-       if (psta) {
-               u8 updated = 0;
-
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               if (!list_empty(&psta->asoc_list)) {
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-                       updated = ap_free_sta(padapter, psta, false, reason);
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
+       if (!psta)
+               return;
 
-               associated_clients_update(padapter, updated);
+       spin_lock_bh(&pstapriv->asoc_list_lock);
+       if (!list_empty(&psta->asoc_list)) {
+               list_del_init(&psta->asoc_list);
+               pstapriv->asoc_list_cnt--;
+               updated = ap_free_sta(padapter, psta, false, reason);
        }
+       spin_unlock_bh(&pstapriv->asoc_list_lock);
+
+       associated_clients_update(padapter, updated);
 }
 
 static void OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame)