1 --- a/src/drivers/driver_nl80211.c
2 +++ b/src/drivers/driver_nl80211.c
3 @@ -2324,13 +2324,18 @@ wpa_driver_nl80211_finish_drv_init(struc
7 -static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv)
8 +static int wpa_driver_nl80211_del_beacon(struct i802_bss *bss)
10 + struct wpa_driver_nl80211_data *drv = bss->drv;
13 + if (!bss->beacon_set)
16 + bss->beacon_set = 0;
17 wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
19 - msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
21 + msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
22 return send_and_recv_msgs(drv, msg, NULL, NULL);
25 @@ -2381,7 +2386,7 @@ static void wpa_driver_nl80211_deinit(st
26 nl80211_remove_monitor_interface(drv);
28 if (is_ap_interface(drv->nlmode))
29 - wpa_driver_nl80211_del_beacon(drv);
30 + wpa_driver_nl80211_del_beacon(bss);
32 if (drv->eapol_sock >= 0) {
33 eloop_unregister_read_sock(drv->eapol_sock);
34 @@ -4233,8 +4238,7 @@ static void nl80211_teardown_ap(struct i
35 nl80211_remove_monitor_interface(drv);
37 nl80211_mgmt_unsubscribe(bss, "AP teardown");
39 - bss->beacon_set = 0;
40 + wpa_driver_nl80211_del_beacon(bss);
44 @@ -6165,8 +6169,6 @@ static int wpa_driver_nl80211_if_remove(
46 wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
47 nl80211_teardown_ap(bss);
48 - if (!bss->added_if && !drv->first_bss->next)
49 - wpa_driver_nl80211_del_beacon(drv);
50 nl80211_destroy_bss(bss);
52 i802_set_iface_flags(bss, 0);
53 @@ -6528,8 +6530,7 @@ static int wpa_driver_nl80211_deinit_ap(
54 struct wpa_driver_nl80211_data *drv = bss->drv;
55 if (!is_ap_interface(drv->nlmode))
57 - wpa_driver_nl80211_del_beacon(drv);
58 - bss->beacon_set = 0;
59 + wpa_driver_nl80211_del_beacon(bss);
62 * If the P2P GO interface was dynamically added, then it is
63 @@ -6548,8 +6549,7 @@ static int wpa_driver_nl80211_stop_ap(vo
64 struct wpa_driver_nl80211_data *drv = bss->drv;
65 if (!is_ap_interface(drv->nlmode))
67 - wpa_driver_nl80211_del_beacon(drv);
68 - bss->beacon_set = 0;
69 + wpa_driver_nl80211_del_beacon(bss);