mac80211: always call wireless_set_data (FS#3784)
authorBob Cantor <coxede6557@w3boats.com>
Thu, 24 Jun 2021 18:07:34 +0000 (04:07 +1000)
committerFelix Fietkau <nbd@nbd.name>
Wed, 30 Jun 2021 17:24:55 +0000 (19:24 +0200)
When wifi is turned off, drv_mac80211_teardown sometimes fails (silently)
because the device to be torn down is not defined.

This situation arises if drv_mac80211_setup was called twice when
wifi was turned on.

This commit ensures that the device to be torn down is always defined
in drv_mac80211_teardown.

Steps to reproduce:

1) Use /sbin/wifi to turn on wifi.
   uci set wireless.@wifi-iface[0].disabled=0
   uci set wireless.@wifi-device[0].disabled=0
   uci commit
   wifi

2) Use /sbin/wifi to turn off wifi.
   uci set wireless.@wifi-device[0].disabled=1
   uci commit
   wifi

3) Observe that wifi is still up.

branches affected: trunk, 21.02

Signed-off-by: Bob Cantor <coxede6557@w3boats.com>
(cherry-picked from commit d515f6b6cde357bf480d32a7387f07ea40e85e52)

package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index 43bd85cfdf2e282665eb866eb32a57046f52f26d..e3b26b287c09b0314b5f8a3c943d1501860a265f 100644 (file)
@@ -907,10 +907,8 @@ drv_mac80211_setup() {
                return 1
        }
 
-       [ -z "$(uci -q -P /var/state show wireless._${phy})" ] && {
-               uci -q -P /var/state set wireless._${phy}=phy
-               wireless_set_data phy="$phy"
-       }
+       wireless_set_data phy="$phy"
+       [ -z "$(uci -q -P /var/state show wireless._${phy})" ] && uci -q -P /var/state set wireless._${phy}=phy
 
        OLDAPLIST=$(uci -q -P /var/state get wireless._${phy}.aplist)
        OLDSPLIST=$(uci -q -P /var/state get wireless._${phy}.splist)