wifi: wireless: declare different S1G chandefs incompatible
authorJohannes Berg <johannes.berg@intel.com>
Mon, 29 Jan 2024 18:34:46 +0000 (19:34 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 8 Feb 2024 12:07:37 +0000 (13:07 +0100)
It doesn't look like we can get into this code, but make it
more robust and declare two S1G chandefs to be incompatible
unless they're identical.

Link: https://msgid.link/20240129194108.b28fb0644a8c.I9297ada5cf1baf00dbbdf8fcffd1806883489fc9@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/chan.c

index 71f1bd456d88cd41f8f6bb129f906b990f0688a4..159b8aac451e3813ac4438835537d47ac814c9c9 100644 (file)
@@ -465,13 +465,18 @@ cfg80211_chandef_compatible(const struct cfg80211_chan_def *c1,
                return NULL;
 
        /*
-        * can't be compatible if one of them is 5 or 10 MHz,
+        * can't be compatible if one of them is 5/10 MHz or S1G
         * but they don't have the same width.
         */
-       if (c1->width == NL80211_CHAN_WIDTH_5 ||
-           c1->width == NL80211_CHAN_WIDTH_10 ||
-           c2->width == NL80211_CHAN_WIDTH_5 ||
-           c2->width == NL80211_CHAN_WIDTH_10)
+#define NARROW_OR_S1G(width)   ((width) == NL80211_CHAN_WIDTH_5 || \
+                                (width) == NL80211_CHAN_WIDTH_10 || \
+                                (width) == NL80211_CHAN_WIDTH_1 || \
+                                (width) == NL80211_CHAN_WIDTH_2 || \
+                                (width) == NL80211_CHAN_WIDTH_4 || \
+                                (width) == NL80211_CHAN_WIDTH_8 || \
+                                (width) == NL80211_CHAN_WIDTH_16)
+
+       if (NARROW_OR_S1G(c1->width) || NARROW_OR_S1G(c2->width))
                return NULL;
 
        if (c1->width == NL80211_CHAN_WIDTH_20_NOHT ||