]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mac80211: check AP using NPCA has NPCA capability
authorJohannes Berg <johannes.berg@intel.com>
Tue, 28 Apr 2026 09:25:42 +0000 (11:25 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 5 May 2026 12:49:04 +0000 (14:49 +0200)
If an AP advertises NPCA, it should also advertise NPCA
capability. Validate this.

Link: https://patch.msgid.link/20260428112708.5c354a838ba5.I8e957767cdbc1b224a22dde0a9c343c3a5851783@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index b09c82082d30fd7a8207e109e50ad712ac557cd6..2b2ab3d458ad4468399e769616b249a7ca9b6843 100644 (file)
@@ -397,8 +397,19 @@ check_uhr:
                const struct ieee80211_sta_uhr_cap *uhr_cap;
                const struct ieee80211_uhr_npca_info *npca;
 
+               /* frames other than beacons carry UHR capability too */
+               if (!elems->uhr_cap)
+                       return IEEE80211_CONN_MODE_EHT;
+
                npca = ieee80211_uhr_npca_info(uhr_oper);
 
+               if (npca && !(elems->uhr_cap->mac.mac_cap[0] &
+                               IEEE80211_UHR_MAC_CAP0_NPCA_SUPP)) {
+                       sdata_info(sdata,
+                                  "AP without UHR NPCA capability uses it, disabling UHR\n");
+                       return IEEE80211_CONN_MODE_EHT;
+               }
+
                /* DBE is not considered yet, so this works */
                if (!cfg80211_chandef_npca_valid(sdata->local->hw.wiphy,
                                                 &npca_chandef, npca) ||