]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211_hwsim: fix link change handling
authorJohannes Berg <johannes.berg@intel.com>
Fri, 19 Aug 2022 12:58:42 +0000 (14:58 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Oct 2022 10:38:04 +0000 (12:38 +0200)
[ Upstream commit 65f7052b6c38f767d95ebfa4ae4b389b6da6a421 ]

The code for determining which links to update in wmediumd
or virtio was wrong, fix it to remove the deflink only if
there were no old links, and also add the deflink if there
are no other new links.

Fixes: c204d9df0202 ("wifi: mac80211_hwsim: handle links for wmediumd/virtio")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mac80211_hwsim.c

index ee34814bd12b5e9f9f50cbb821fe1c63a33df556..a074552bcec3dbf4c45ae45b540f5c27e873bc71 100644 (file)
@@ -2995,10 +2995,15 @@ static int mac80211_hwsim_change_vif_links(struct ieee80211_hw *hw,
                                           u16 old_links, u16 new_links,
                                           struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
 {
-       unsigned long rem = old_links & ~new_links ?: BIT(0);
+       unsigned long rem = old_links & ~new_links;
        unsigned long add = new_links & ~old_links;
        int i;
 
+       if (!old_links)
+               rem |= BIT(0);
+       if (!new_links)
+               add |= BIT(0);
+
        for_each_set_bit(i, &rem, IEEE80211_MLD_MAX_NUM_LINKS)
                mac80211_hwsim_config_mac_nl(hw, old[i]->addr, false);