hostapd: Fix WPA, IEEE 802.1X, and WPS deinit in cases where init fails
With driver wrappers that implement set_privacy(), set_generic_elem(), set_ieee8021x(), or set_ap_wps_ie(), it was possible to hit a NULL pointer dereference in error cases where interface setup failed and the network configuration used WPA/WPA2, IEEE 802.1X, or WPS. Fix this by skipping the driver operations in case the driver interface is not initialized. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
4150c7c97c
commit
1b822f52e6
|
@ -2190,7 +2190,7 @@ void ieee802_1x_deinit(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
eloop_cancel_timeout(ieee802_1x_rekey, hapd, NULL);
|
eloop_cancel_timeout(ieee802_1x_rekey, hapd, NULL);
|
||||||
|
|
||||||
if (hapd->driver != NULL &&
|
if (hapd->driver && hapd->drv_priv &&
|
||||||
(hapd->conf->ieee802_1x || hapd->conf->wpa))
|
(hapd->conf->ieee802_1x || hapd->conf->wpa))
|
||||||
hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 0);
|
hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 0);
|
||||||
|
|
||||||
|
|
|
@ -674,13 +674,14 @@ void hostapd_deinit_wpa(struct hostapd_data *hapd)
|
||||||
wpa_deinit(hapd->wpa_auth);
|
wpa_deinit(hapd->wpa_auth);
|
||||||
hapd->wpa_auth = NULL;
|
hapd->wpa_auth = NULL;
|
||||||
|
|
||||||
if (hostapd_set_privacy(hapd, 0)) {
|
if (hapd->drv_priv && hostapd_set_privacy(hapd, 0)) {
|
||||||
wpa_printf(MSG_DEBUG, "Could not disable "
|
wpa_printf(MSG_DEBUG, "Could not disable "
|
||||||
"PrivacyInvoked for interface %s",
|
"PrivacyInvoked for interface %s",
|
||||||
hapd->conf->iface);
|
hapd->conf->iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hostapd_set_generic_elem(hapd, (u8 *) "", 0)) {
|
if (hapd->drv_priv &&
|
||||||
|
hostapd_set_generic_elem(hapd, (u8 *) "", 0)) {
|
||||||
wpa_printf(MSG_DEBUG, "Could not remove generic "
|
wpa_printf(MSG_DEBUG, "Could not remove generic "
|
||||||
"information element from interface %s",
|
"information element from interface %s",
|
||||||
hapd->conf->iface);
|
hapd->conf->iface);
|
||||||
|
|
|
@ -872,7 +872,8 @@ static void hostapd_wps_clear_ies(struct hostapd_data *hapd, int deinit_only)
|
||||||
hapd->wps_probe_resp_ie = NULL;
|
hapd->wps_probe_resp_ie = NULL;
|
||||||
|
|
||||||
if (deinit_only) {
|
if (deinit_only) {
|
||||||
hostapd_reset_ap_wps_ie(hapd);
|
if (hapd->drv_priv)
|
||||||
|
hostapd_reset_ap_wps_ie(hapd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue