wifi: mac80211: more station handling sanity checks
authorJohannes Berg <johannes.berg@intel.com>
Mon, 18 Jul 2022 21:01:19 +0000 (23:01 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 22 Jul 2022 12:28:11 +0000 (14:28 +0200)
Add more sanity checks to the API handling, we shouldn't
be able to create a station without links, nor should we
be able to add a link to a station that wasn't created as
an MLD with links in the first place.

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

index fa4379761e12c0481cf72bfadf4bc025eff4ccb4..f519d9cf6e238a62e519c12deb0da9a6b510df28 100644 (file)
@@ -4649,6 +4649,9 @@ static int sta_add_link_station(struct ieee80211_local *local,
        if (!sta)
                return -ENOENT;
 
+       if (!sta->sta.valid_links)
+               return -EINVAL;
+
        if (sta->sta.valid_links & BIT(params->link_id))
                return -EALREADY;
 
@@ -4724,6 +4727,10 @@ static int sta_del_link_station(struct ieee80211_sub_if_data *sdata,
        if (!(sta->sta.valid_links & BIT(params->link_id)))
                return -EINVAL;
 
+       /* must not create a STA without links */
+       if (sta->sta.valid_links == BIT(params->link_id))
+               return -EINVAL;
+
        ieee80211_sta_remove_link(sta, params->link_id);
 
        return 0;