aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2017-02-04 20:17:54 (GMT)
committerJouni Malinen <j@w1.fi>2017-02-04 20:17:54 (GMT)
commitdb5e53cb06369eebbacaab0cef5e3df3ee25ce1c (patch)
tree5e5fee75de0c31c7953328edd89646b7eac5adbd
parent9b170991ac15032624ab330fc10534e237579999 (diff)
downloadhostap-db5e53cb06369eebbacaab0cef5e3df3ee25ce1c.zip
hostap-db5e53cb06369eebbacaab0cef5e3df3ee25ce1c.tar.gz
hostap-db5e53cb06369eebbacaab0cef5e3df3ee25ce1c.tar.bz2
mesh: Fix struct hostapd_data initialization
The local custom version of allocating and initializing struct hostapd_data within wpa_supplicant_mesh_init() is problematic. This has already missed couple of initialization steps that are required. Instead of trying to remember to keep this up to date, use hostapd_alloc_bss_data() so that there is only one place for this initialization. This is fixing a recent issue where FILS HLP started using hapd->dhcp_server and expected that to be initialized to -1. For the mesh case, that did not happen and when removing the interface, the FILS HLP implementation ended up unregistering eloop socket for hapd->dhcp_server (= 0). This could result in missing socket callbacks for an arbitrary socket. Signed-off-by: Jouni Malinen <j@w1.fi>
-rw-r--r--src/ap/hostapd.c3
-rw-r--r--wpa_supplicant/mesh.c3
2 files changed, 3 insertions, 3 deletions
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 47fa144..cf8a8cb 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -2004,7 +2004,8 @@ hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
hapd->iconf = conf;
hapd->conf = bss;
hapd->iface = hapd_iface;
- hapd->driver = hapd->iconf->driver;
+ if (conf)
+ hapd->driver = conf->driver;
hapd->ctrl_sock = -1;
dl_list_init(&hapd->ctrl_dst);
dl_list_init(&hapd->nr_db);
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
index 602ed2e..2ca81a3 100644
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
@@ -177,10 +177,9 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
if (!ifmsh->bss)
goto out_free;
- ifmsh->bss[0] = bss = os_zalloc(sizeof(struct hostapd_data));
+ ifmsh->bss[0] = bss = hostapd_alloc_bss_data(NULL, NULL, NULL);
if (!bss)
goto out_free;
- dl_list_init(&bss->nr_db);
os_memcpy(bss->own_addr, wpa_s->own_addr, ETH_ALEN);
bss->driver = wpa_s->driver;