atheros: Clear WPS appie during deinit
The WPS IE(s) need to be cleared from the driver explicitly. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
857d94225a
commit
1de071007e
4 changed files with 20 additions and 4 deletions
|
@ -217,6 +217,15 @@ void hostapd_free_ap_extra_ies(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hostapd_reset_ap_wps_ie(struct hostapd_data *hapd)
|
||||||
|
{
|
||||||
|
if (hapd->driver == NULL || hapd->driver->set_ap_wps_ie == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return hapd->driver->set_ap_wps_ie(hapd->drv_priv, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int hostapd_set_ap_wps_ie(struct hostapd_data *hapd)
|
int hostapd_set_ap_wps_ie(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
struct wpabuf *beacon, *proberesp, *assocresp;
|
struct wpabuf *beacon, *proberesp, *assocresp;
|
||||||
|
|
|
@ -24,6 +24,7 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
|
||||||
void hostapd_free_ap_extra_ies(struct hostapd_data *hapd, struct wpabuf *beacon,
|
void hostapd_free_ap_extra_ies(struct hostapd_data *hapd, struct wpabuf *beacon,
|
||||||
struct wpabuf *proberesp,
|
struct wpabuf *proberesp,
|
||||||
struct wpabuf *assocresp);
|
struct wpabuf *assocresp);
|
||||||
|
int hostapd_reset_ap_wps_ie(struct hostapd_data *hapd);
|
||||||
int hostapd_set_ap_wps_ie(struct hostapd_data *hapd);
|
int hostapd_set_ap_wps_ie(struct hostapd_data *hapd);
|
||||||
int hostapd_set_authorized(struct hostapd_data *hapd,
|
int hostapd_set_authorized(struct hostapd_data *hapd,
|
||||||
struct sta_info *sta, int authorized);
|
struct sta_info *sta, int authorized);
|
||||||
|
|
|
@ -856,8 +856,10 @@ static void hostapd_wps_clear_ies(struct hostapd_data *hapd, int deinit_only)
|
||||||
wpabuf_free(hapd->wps_probe_resp_ie);
|
wpabuf_free(hapd->wps_probe_resp_ie);
|
||||||
hapd->wps_probe_resp_ie = NULL;
|
hapd->wps_probe_resp_ie = NULL;
|
||||||
|
|
||||||
if (deinit_only)
|
if (deinit_only) {
|
||||||
|
hostapd_reset_ap_wps_ie(hapd);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
hostapd_set_ap_wps_ie(hapd);
|
hostapd_set_ap_wps_ie(hapd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1694,6 +1694,13 @@ atheros_deinit(void *priv)
|
||||||
struct atheros_driver_data *drv = priv;
|
struct atheros_driver_data *drv = priv;
|
||||||
|
|
||||||
atheros_reset_appfilter(drv);
|
atheros_reset_appfilter(drv);
|
||||||
|
|
||||||
|
if (drv->wpa_ie || drv->wps_beacon_ie || drv->wps_probe_resp_ie) {
|
||||||
|
wpabuf_free(drv->wpa_ie);
|
||||||
|
wpabuf_free(drv->wps_beacon_ie);
|
||||||
|
wpabuf_free(drv->wps_probe_resp_ie);
|
||||||
|
atheros_set_opt_ie(priv, NULL, 0);
|
||||||
|
}
|
||||||
netlink_deinit(drv->netlink);
|
netlink_deinit(drv->netlink);
|
||||||
(void) linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
|
(void) linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
|
||||||
if (drv->ioctl_sock >= 0)
|
if (drv->ioctl_sock >= 0)
|
||||||
|
@ -1704,9 +1711,6 @@ atheros_deinit(void *priv)
|
||||||
l2_packet_deinit(drv->sock_xmit);
|
l2_packet_deinit(drv->sock_xmit);
|
||||||
if (drv->sock_raw)
|
if (drv->sock_raw)
|
||||||
l2_packet_deinit(drv->sock_raw);
|
l2_packet_deinit(drv->sock_raw);
|
||||||
wpabuf_free(drv->wpa_ie);
|
|
||||||
wpabuf_free(drv->wps_beacon_ie);
|
|
||||||
wpabuf_free(drv->wps_probe_resp_ie);
|
|
||||||
free(drv);
|
free(drv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue