nl80211: Fix hostapd error path
i802_init() tries to clean up everything manually, call wpa_driver_nl80211_deinit() instead and also handle the EAPOL socket properly.
This commit is contained in:
parent
36d84860bb
commit
7635bfb071
1 changed files with 3 additions and 12 deletions
|
@ -6395,6 +6395,8 @@ static void *i802_init(struct hostapd_data *hapd,
|
||||||
|
|
||||||
drv = bss->drv;
|
drv = bss->drv;
|
||||||
drv->nlmode = NL80211_IFTYPE_AP;
|
drv->nlmode = NL80211_IFTYPE_AP;
|
||||||
|
drv->eapol_sock = -1;
|
||||||
|
|
||||||
if (linux_br_get(brname, params->ifname) == 0) {
|
if (linux_br_get(brname, params->ifname) == 0) {
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: Interface %s is in bridge %s",
|
wpa_printf(MSG_DEBUG, "nl80211: Interface %s is in bridge %s",
|
||||||
params->ifname, brname);
|
params->ifname, brname);
|
||||||
|
@ -6462,18 +6464,7 @@ static void *i802_init(struct hostapd_data *hapd,
|
||||||
return bss;
|
return bss;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
nl80211_remove_monitor_interface(drv);
|
wpa_driver_nl80211_deinit(bss);
|
||||||
rfkill_deinit(drv->rfkill);
|
|
||||||
if (drv->ioctl_sock >= 0)
|
|
||||||
close(drv->ioctl_sock);
|
|
||||||
|
|
||||||
genl_family_put(drv->nl80211);
|
|
||||||
nl_cache_free(drv->nl_cache);
|
|
||||||
nl80211_handle_destroy(drv->nl_handle);
|
|
||||||
nl_cb_put(drv->nl_cb);
|
|
||||||
eloop_unregister_read_sock(nl_socket_get_fd(drv->nl_handle_event));
|
|
||||||
|
|
||||||
os_free(drv);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue