[PATCH] wiphy: check if ht_capabilities are actually set

berend <[email protected]> Thu, 25 Dec 2025 18:26:57 +0000
Newsgroups dev.linux.lists.iwd
Message-ID <[email protected]>
commit 928fba083c87147603702907940d7c263e62e4dd (HEAD -> master)
Author: Berend De Schouwer <[email protected]>
Date:   Thu Dec 25 17:31:49 2025 +0200

    wiphy: check if ht_capabilities are actually set
    
    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.

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_supported_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,
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

wsGpBAEBCABdBYJpTYHvCZDbbuBxk4Cg6TUUAAAAAAAcABBzYWx0QG5vdGF0
aW9ucy5vcGVucGdwanMub3JnbInCLrujNOu4isZ++fzuFBYhBBKM1nGLSON6
q6UFAttu4HGTgKDpAADcTRAAll6KYySoYywsXOpvYk0kN2KK3+CBqaxKDQ1u
RmpORsJiQpAyiJPIz70pwzM1JweZAlA4Y3gOAutKoBFuL26eKHeloki4Shd/
vl2bkRSuXa9/gi5sFiwKsojD3s3Hw6Xr9QnLV21eSnSxOcCaMopYbbVnkdA5
vlsOIa24YFPqnceXW75YSiXV8DWSxyZFrKbdWn/Sfh2nq/1fs3MlJZduoqxG
xEFN23PeK8dLS+F2sjDlqWTbGXxe6bc2SQgyqWKM8MtwwFKtT1F3N00+qJ7+
LzTq2Cc0ouaqf5/erTLgtDUnsI/NsjVk2ZkK0selQ7KjP8dmImLOjPQvGppf
htLna0SIUB/ugkukvZw1o6YtK0+KbmfCBN9VJgvhWg4m5iN/7eiSMJxsQvul
qPIk2aycUrVBDHItFXaOTW6ncHb7TZdZ6cgpe/91fD8Orqy52mWHLMFaCnim
hOpzI97VU6l69SyIfVHqmli+VDG43FODULPRuefNh61iSs4UKPryQzCbc6IK
8RuivBZHWEVMVuUU/YqQWYM/hz/JTkFMQQ8KdsKIpnqEEjTAjySNE7le7fKb
tX1UXceXlaJOGSbP3/3aq3GuKzwEjynd754zeBYaoZfo1MwkkGq2ruLb3Kww
7A4tt60EAru4TWNfHO26AiorXb2sv/dgPHwxmQ2mbjczejU=
=VqWh
-----END PGP SIGNATURE-----