if (bss != &drv->first_bss) {
struct i802_bss *tbss;
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -776,7 +776,14 @@ void wpa_receive(struct wpa_authenticato
+ }
+
+ if (sm->wpa == WPA_VERSION_WPA2) {
+- if (key->type != EAPOL_KEY_TYPE_RSN) {
++ if (key->type == EAPOL_KEY_TYPE_WPA) {
++ /*
++ * Some deployed station implementations seem to send
++ * msg 4/4 with incorrect type value in WPA2 mode.
++ */
++ wpa_printf(MSG_DEBUG, "Workaround: Allow EAPOL-Key "
++ "with unexpected WPA type in RSN mode");
++ } else if (key->type != EAPOL_KEY_TYPE_RSN) {
+ wpa_printf(MSG_DEBUG, "Ignore EAPOL-Key with "
+ "unexpected type %d in RSN mode",
+ key->type);
struct sta_info *sta, int success)
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
-@@ -2534,6 +2534,7 @@ static int wpa_cipher_bits(int cipher)
+@@ -2541,6 +2541,7 @@ static int wpa_cipher_bits(int cipher)
}
}
#define RSN_SUITE "%02x-%02x-%02x-%d"
#define RSN_SUITE_ARG(s) \
-@@ -2697,7 +2698,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
+@@ -2704,7 +2705,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
return len;
}
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
-@@ -1330,7 +1330,7 @@ static void wpa_send_eapol(struct wpa_au
+@@ -1337,7 +1337,7 @@ static void wpa_send_eapol(struct wpa_au
keyidx, encr, 0);
ctr = pairwise ? sm->TimeoutCtr : sm->GTimeoutCtr;