[PATCH] wiphy: check if ht_capabilities are actually set

berend de schouwer <[email protected]> Sat, 27 Dec 2025 04:45:27 +0000
Newsgroups dev.linux.lists.iwd
Message-ID <[email protected]>
From: Berend De Schouwer <[email protected]>

Some devices set HT, but only provide HT20.  When this is true,
ap_validate_band_channel() will succeed with 40MHz width, but the
device will refuse to start an AP.

One such device is the brcmfmac on the Raspberry Pi 5 and
earlier.
---
 src/wiphy.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/wiphy.c b/src/wiphy.c
index b6774f69..85e31cf1 100644
--- a/src/wiphy.c
+++ b/src/wiphy.c
@@ -1676,6 +1676,18 @@ static void parse_band_iftype_data(struct band *band, struct l_genl_attr *ifdata
 	}
 }
 
+static bool parse_ht_capabilities(struct band *band)
+{
+	if (test_bit(band->ht_capabilities, 1))
+		return true;
+
+	if (test_bit(band->ht_capabilities, 6))
+		return true;
+
+	l_debug("no real 40 MHz found");
+	return false;
+}
+
 static void parse_supported_bands(struct wiphy *wiphy,
 						struct l_genl_attr *bands)
 {
@@ -1772,7 +1784,6 @@ static void parse_suppo
rted_bands(struct wiphy *wiphy,
 					continue;
 
 				memcpy(band->ht_mcs_set, data, len);
-				band->ht_supported = true;
 				break;
 			case NL80211_BAND_ATTR_HT_CAPA:
 				if (L_WARN_ON(len !=
@@ -1780,7 +1791,7 @@ static void parse_supported_bands(struct wiphy *wiphy,
 					continue;
 
 				memcpy(band->ht_capabilities, data, len);
-				band->ht_supported = true;
+				band->ht_supported = parse_ht_capabilities(band);
 				break;
 			/*
 			 * AMPDU factor/density are part of A-MPDU Parameters,
-- 
2.52.0
publickey - Berend De Schouwer - 0x128CD671.asc (application/pgp-keys, 3.1 KB)
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: https://gopenpgp.org
Version: GopenPGP 2.8.2

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
i4ZPyDBc3n68rqs=
=9SXl
-----END PGP PUBLIC KEY BLOCK-----
signature.asc (application/pgp-signature, 928 B)
-----BEGIN PGP SIGNATURE-----
Version: ProtonMail

wsGpBAEBCABdBYJpT2RmCZDbbuBxk4Cg6TUUAAAAAAAcABBzYWx0QG5vdGF0
aW9ucy5vcGVucGdwanMub3Jnlu++caGyNKNAT3AeP7/KhRYhBBKM1nGLSON6
q6UFAttu4HGTgKDpAABjmBAAuJflVHqgRgcEc38+0VnVHUDNEAWapc7Tpsno
VyT+fBL4HUo65lMrlgK+iVL3xEVhzDnHPftfrPP/Z8RAiLyutAuf/H9TUrOy
EGWy98Pg53D4/FOX2jARDqKA9qFyevksJqZFfBvguWs6pdOfH6CyWL1HwpzO
LknzXYgzDuJbZq9CcZ/C7gXJ/D7KS0VUQiCNN4zMRU5IvNuUotxjeUv1HaEW
1IYkMGq8PoaKoC6T4YmnRBKYsjwFH+f6VFEnhTsSnUa6OkPe/ZXCWI8PmLUf
0HgnQvHf3L75bdvjDGqK5cXuSlf3eiuQ41Q1vCuqMgsLy8y5R13hSBAe/jWY
fSbKAevQtptKR+NHqUXb3oS6o668X2RI0nWYDwadrt2jrMJLg7zYJq9upR5B
h4CtGCRnPDcjxq4H+zczMXtUcxTAzNdE5w+KDSUD13/K48zVjxw+DG8ZtnqT
xPA4zji2CbYfk9l9p9gcQthkk06iujUIxOvvBAk1AKD687W2Zb6cv4yBVhl0
SqRh/EA80mkeP5M+WvLzn/HutwtJ6SF3mGLtGP5dX8tvW3nASGCq78SvSUel
OUJ4CRc/6ClXV9a+2nTyM6pe6q25zMXE9Yg+7eZzExOMUlOHwVRLWr2HnAgI
/T4TH79QIibjhyyv0suwDBsSa3g3BcMf9Wm8s/2t9xY8Qdw=
=stg/
-----END PGP SIGNATURE-----