]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: cfg80211/mac80211: remove wrong scan request n_channels
authorJohannes Berg <johannes.berg@intel.com>
Fri, 18 Jul 2025 08:32:36 +0000 (10:32 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 18 Jul 2025 12:07:35 +0000 (14:07 +0200)
This (partially) reverts commits
 - 838c7b8f1f27 ("wifi: nl80211: Avoid address calculations via out of bounds array indexing")
 - f1d3334d604c ("wifi: cfg80211: sme: init n_channels before channels[] access")
 - 82bbe02b2500 ("wifi: mac80211: Set n_channels after allocating struct cfg80211_scan_request")

These commits all set the structure to be in an inconsistent
state, setting n_channels to some value before them actually
being filled in. That's fine for what the code does now, but
with the removal of __counted_by() in 444020f4bf06 ("wifi:
cfg80211: remove scan request n_channels counted_by") it's no
longer needed and it does leave a bit of a landmine there
since breaking out of some code to send the scan or something
would leave it wrong.

Remove the now superfluous n_channels settings.

Link: https://patch.msgid.link/20250718103237.59510b2384c5.Ied5ba9c5c49efc008f4491c8ca7a45858a83f064@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/main.c
net/wireless/nl80211.c
net/wireless/sme.c

index ec60b82af0076b93cc146ca9710e8ce2deb0e187..351564360c266fcf9e7504d1bbfde6066cf7c363 100644 (file)
@@ -1334,7 +1334,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
                                      GFP_KERNEL);
        if (!local->int_scan_req)
                return -ENOMEM;
-       local->int_scan_req->n_channels = channels;
 
        eth_broadcast_addr(local->int_scan_req->bssid);
 
index 63f015ce9ad41883f418760786d2cd7955ed8de1..20bc0f052c162ea57e3505af301a076aef7ef1c1 100644 (file)
@@ -9975,7 +9975,6 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
        request = kzalloc(size, GFP_KERNEL);
        if (!request)
                return -ENOMEM;
-       request->req.n_channels = n_channels;
 
        if (n_ssids)
                request->req.ssids = (void *)request + ssids_offset;
index 6d7a7e7f0fc2938af24defad4146c1bd2f8ad5c9..826ec0a6355f1c724a23c3f5fdbc9597a0ff68c8 100644 (file)
@@ -83,7 +83,6 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
        if (!request)
                return -ENOMEM;
 
-       request->req.n_channels = n_channels;
        if (wdev->conn->params.channel) {
                enum nl80211_band band = wdev->conn->params.channel->band;
                struct ieee80211_supported_band *sband =