From: Maxime Bizon Date: Thu, 20 Mar 2014 18:29:44 +0000 (+0100) Subject: nl80211: Fix EAPOL frames not being delivered X-Git-Tag: hostap_2_2~450 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b36935be1a14341771b0fd5491808c3f6fdcb603;p=thirdparty%2Fhostap.git nl80211: Fix EAPOL frames not being delivered When hostapd choose to reuse an existing interface, it does not add it to the set of interfaces from which we accept EAPOL packets. Make sure we always add it to that set. Signed-off-by: Maxime Bizon --- diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index bc4b7e316..6f3c85d19 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -9486,6 +9486,11 @@ static void add_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx) wpa_printf(MSG_DEBUG, "nl80211: Add own interface ifindex %d", ifidx); + if (have_ifidx(drv, ifidx)) { + wpa_printf(MSG_DEBUG, "nl80211: ifindex %d already in the list", + ifidx); + return; + } for (i = 0; i < drv->num_if_indices; i++) { if (drv->if_indices[i] == 0) { drv->if_indices[i] = ifidx; @@ -9965,6 +9970,9 @@ static int wpa_driver_nl80211_if_add(void *priv, enum wpa_driver_if_type type, if (drv->global) drv->global->if_add_ifindex = ifidx; + if (ifidx > 0) + add_ifidx(drv, ifidx); + return 0; } @@ -9980,6 +9988,8 @@ static int wpa_driver_nl80211_if_remove(struct i802_bss *bss, __func__, type, ifname, ifindex, bss->added_if); if (ifindex > 0 && (bss->added_if || bss->ifindex != ifindex)) nl80211_remove_iface(drv, ifindex); + else if (ifindex > 0 && !bss->added_if) + del_ifidx(drv, ifindex); if (type != WPA_IF_AP_BSS) return 0;