[v2] wpa_supplicant: fix race condition in mesh mpm new peer handling
diff mbox series

Message ID 20190217150256.52695-1-nbd@nbd.name
State New
Headers show
Series
  • [v2] wpa_supplicant: fix race condition in mesh mpm new peer handling
Related show

Commit Message

Felix Fietkau Feb. 17, 2019, 3:02 p.m. UTC
When wpa_supplicant receives another new peer event before the first one
has been processed, it tries to add a station to the driver a second time
(which fails) and then tears down the station entry until another event
comes in.
Fix this by only adding a station to the driver if it didn't exist already.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
 wpa_supplicant/mesh_mpm.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Patch
diff mbox series

diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c
index 44859396c..2d2c47d76 100644
--- a/wpa_supplicant/mesh_mpm.c
+++ b/wpa_supplicant/mesh_mpm.c
@@ -685,11 +685,12 @@  static struct sta_info * mesh_mpm_add_peer(struct wpa_supplicant *wpa_s,
 	}
 
 	sta = ap_get_sta(data, addr);
-	if (!sta) {
-		sta = ap_sta_add(data, addr);
-		if (!sta)
-			return NULL;
-	}
+	if (sta)
+		return NULL;
+
+	sta = ap_sta_add(data, addr);
+	if (!sta)
+		return NULL;
 
 	/* Set WMM by default since Mesh STAs are QoS STAs */
 	sta->flags |= WLAN_STA_WMM;