]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: accept STA changes without link changes
authorJohannes Berg <johannes.berg@intel.com>
Sat, 23 Jul 2022 20:08:49 +0000 (22:08 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Oct 2022 10:39:06 +0000 (12:39 +0200)
[ Upstream commit b303835dabe0340f932ebb4e260d2229f79b0684 ]

If there's no link ID, then check that there are no changes to
the link, and if so accept them, unless a new link is created.
While at it, reject creating a new link without an address.

This fixes authorizing an MLD (peer) that has no link 0.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/mac80211/cfg.c

index e5239a17a875ece9513d5313fb29e70399bdbef3..65f34945a7678929f576532404a3dfe4725e3cd4 100644 (file)
@@ -1610,6 +1610,18 @@ static int sta_link_apply_parameters(struct ieee80211_local *local,
                rcu_dereference_protected(sta->link[link_id],
                                          lockdep_is_held(&local->sta_mtx));
 
+       /*
+        * If there are no changes, then accept a link that doesn't exist,
+        * unless it's a new link.
+        */
+       if (params->link_id < 0 && !new_link &&
+           !params->link_mac && !params->txpwr_set &&
+           !params->supported_rates_len &&
+           !params->ht_capa && !params->vht_capa &&
+           !params->he_capa && !params->eht_capa &&
+           !params->opmode_notif_used)
+               return 0;
+
        if (!link || !link_sta)
                return -EINVAL;
 
@@ -1625,6 +1637,8 @@ static int sta_link_apply_parameters(struct ieee80211_local *local,
                                             params->link_mac)) {
                        return -EINVAL;
                }
+       } else if (new_link) {
+               return -EINVAL;
        }
 
        if (params->txpwr_set) {