staging: r8188eu: exit for deauth from unknown station
authorMartin Kaiser <martin@kaiser.cx>
Sat, 15 Oct 2022 15:24:37 +0000 (17:24 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Oct 2022 15:35:03 +0000 (17:35 +0200)
If we receive a deauth message from an unknown station, we can drop this
message and exit immediately. Reorder the code to make this clearer, don't
wrap everything in an if statement.

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

index 742976c38cd567eaa9c68a3a37d5518325c6271e..40df0f9982f4a15701f4114119075e4d08a50b2d 100644 (file)
@@ -1477,21 +1477,21 @@ unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame)
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
                struct sta_info *psta;
                struct sta_priv *pstapriv = &padapter->stapriv;
+               u8 updated = 0;
 
                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 _SUCCESS;
 
-                       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);
 
                return _SUCCESS;
        } else {