nl80211: Clean up error path in wpa_driver_nl80211_init
No need to duplicate the deinit code since wpa_driver_nl80211_deinit() can be used here to clean up after a failure.
This commit is contained in:
parent
a92dfde818
commit
dac12351d8
1 changed files with 7 additions and 12 deletions
|
@ -171,6 +171,7 @@ struct nl80211_global {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void nl80211_global_deinit(void *priv);
|
static void nl80211_global_deinit(void *priv);
|
||||||
|
static void wpa_driver_nl80211_deinit(void *priv);
|
||||||
|
|
||||||
struct i802_bss {
|
struct i802_bss {
|
||||||
struct wpa_driver_nl80211_data *drv;
|
struct wpa_driver_nl80211_data *drv;
|
||||||
|
@ -221,6 +222,7 @@ struct wpa_driver_nl80211_data {
|
||||||
int disable_11b_rates;
|
int disable_11b_rates;
|
||||||
|
|
||||||
unsigned int pending_remain_on_chan:1;
|
unsigned int pending_remain_on_chan:1;
|
||||||
|
unsigned int in_interface_list:1;
|
||||||
|
|
||||||
u64 remain_on_chan_cookie;
|
u64 remain_on_chan_cookie;
|
||||||
u64 send_action_cookie;
|
u64 send_action_cookie;
|
||||||
|
@ -2211,22 +2213,15 @@ static void * wpa_driver_nl80211_init(void *ctx, const char *ifname,
|
||||||
nl80211_l2_read, drv, 0);
|
nl80211_l2_read, drv, 0);
|
||||||
#endif /* CONFIG_AP */
|
#endif /* CONFIG_AP */
|
||||||
|
|
||||||
if (drv->global)
|
if (drv->global) {
|
||||||
dl_list_add(&drv->global->interfaces, &drv->list);
|
dl_list_add(&drv->global->interfaces, &drv->list);
|
||||||
|
drv->in_interface_list = 1;
|
||||||
|
}
|
||||||
|
|
||||||
return bss;
|
return bss;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
rfkill_deinit(drv->rfkill);
|
wpa_driver_nl80211_deinit(bss);
|
||||||
if (drv->ioctl_sock >= 0)
|
|
||||||
close(drv->ioctl_sock);
|
|
||||||
|
|
||||||
genl_family_put(drv->nl80211);
|
|
||||||
nl_destroy_handles(&drv->nl);
|
|
||||||
nl_cb_put(drv->nl_cb);
|
|
||||||
eloop_unregister_read_sock(nl_socket_get_fd(drv->nl_event.handle));
|
|
||||||
|
|
||||||
os_free(drv);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2491,7 +2486,7 @@ static void wpa_driver_nl80211_deinit(void *priv)
|
||||||
|
|
||||||
os_free(drv->filter_ssids);
|
os_free(drv->filter_ssids);
|
||||||
|
|
||||||
if (drv->global)
|
if (drv->in_interface_list)
|
||||||
dl_list_del(&drv->list);
|
dl_list_del(&drv->list);
|
||||||
|
|
||||||
os_free(drv);
|
os_free(drv);
|
||||||
|
|
Loading…
Reference in a new issue