IBSS RSN: Do not start multiple Auth/Supp for same peer
authorJouni Malinen <j@w1.fi>
Sat, 15 Jan 2011 14:55:15 +0000 (16:55 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 15 Jan 2011 14:55:15 +0000 (16:55 +0200)
This avoids an issue when a received EAPOL-Key frame from a peer
is initiating IBSS RSN Authenticator and Supplicant for the peer
and the following new-STA-in-IBSS event from the driver is adding
yet another instance of Authenticator/Supplicant. The EAPOL-Key
RX case was already checking whether an instance had been started;
the driver new-STA event needs to do same.

wpa_supplicant/ibss_rsn.c

index d4894a5..4792ef6 100644 (file)
@@ -361,6 +361,15 @@ int ibss_rsn_start(struct ibss_rsn *ibss_rsn, const u8 *addr)
 {
        struct ibss_rsn_peer *peer;
 
+       for (peer = ibss_rsn->peers; peer; peer = peer->next) {
+               if (os_memcmp(addr, peer->addr, ETH_ALEN) == 0) {
+                       wpa_printf(MSG_DEBUG, "RSN: IBSS Authenticator and "
+                                  "Supplicant for peer " MACSTR " already "
+                                  "running", MAC2STR(addr));
+                       return 0;
+               }
+       }
+
        wpa_printf(MSG_DEBUG, "RSN: Starting IBSS Authenticator and "
                   "Supplicant for peer " MACSTR, MAC2STR(addr));