From db5e53cb06369eebbacaab0cef5e3df3ee25ce1c Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 4 Feb 2017 22:17:54 +0200 Subject: [PATCH] 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 --- src/ap/hostapd.c | 3 ++- wpa_supplicant/mesh.c | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 47fa144c4..cf8a8cb37 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 602ed2eb2..2ca81a382 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;