[PATCH 2/2] WPA: disassociate client on invalid EAP-Key state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A previous commit addressed broken supplicants in Disassociation loops by
destroying PMKSAs when receiving a spurious EAPOL-Start.  After that change,
the STA recovers and Associates after a full EAP.  The Disassociation does
not happen until after multiple EAP-Identity requests are ignored by the
STA, which takes more than a minute.

This change shortens that recovery time to a few seconds by proactively
Disassociating the STA when it receiving EAPOL-Key 2/4 or 4/4 in an invalid
state.  The supplicants we've seen with this bad behavior have only broken
sporadically when waking up, so a few seconds is reasonable.  Consequently,
the core issue has been dubbed Groggy Supplicant Syndrome.

Signed-off-by: Derrick Pallas <pallas@xxxxxxxxxx>
---
 src/ap/wpa_auth.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
index 8110cd7..39fbf6c 100644
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
@@ -1174,6 +1174,7 @@ continue_processing:
 					 "received EAPOL-Key msg 4/4 in "
 					 "invalid state (%d) - dropped",
 					 sm->wpa_ptk_state);
+			wpa_sta_disconnect(wpa_auth, sm->addr);
 			return;
 		}
 		break;
@@ -1184,6 +1185,7 @@ continue_processing:
 					 "received EAPOL-Key msg 2/2 in "
 					 "invalid state (%d) - dropped",
 					 sm->wpa_ptk_group_state);
+			wpa_sta_disconnect(wpa_auth, sm->addr);
 			return;
 		}
 		break;
-- 
2.10.2


_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux