wifi: iwlwifi: mvm: fix iwl_mvm_scan_fits() calculation
authorDaniel Gabay <daniel.gabay@intel.com>
Sun, 25 Aug 2024 16:17:05 +0000 (19:17 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 26 Aug 2024 15:38:45 +0000 (17:38 +0200)
The calculation should consider also the 6GHz IE's len, fix that.
In addition, in iwl_mvm_sched_scan_start() the scan_fits helper is
called only in case non_psc_incldued is true, but it should be called
regardless, fix that as well.

Signed-off-by: Daniel Gabay <daniel.gabay@intel.com>
Reviewed-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20240825191257.7db825442fd2.I99f4d6587709de02072fd57957ec7472331c6b1d@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/scan.c

index 8e0df31f1b3e296a7d23abe713ec0de93aef1327..ecd9d301e88b2c1c348c38cc68c4bce5597fb7c3 100644 (file)
@@ -837,8 +837,8 @@ static inline bool iwl_mvm_scan_fits(struct iwl_mvm *mvm, int n_ssids,
        return ((n_ssids <= PROBE_OPTION_MAX) &&
                (n_channels <= mvm->fw->ucode_capa.n_scan_channels) &
                (ies->common_ie_len +
-                ies->len[NL80211_BAND_2GHZ] +
-                ies->len[NL80211_BAND_5GHZ] <=
+                ies->len[NL80211_BAND_2GHZ] + ies->len[NL80211_BAND_5GHZ] +
+                ies->len[NL80211_BAND_6GHZ] <=
                 iwl_mvm_max_scan_ie_fw_cmd_room(mvm)));
 }
 
@@ -3168,18 +3168,16 @@ int iwl_mvm_sched_scan_start(struct iwl_mvm *mvm,
                params.n_channels = j;
        }
 
-       if (non_psc_included &&
-           !iwl_mvm_scan_fits(mvm, req->n_ssids, ies, params.n_channels)) {
-               kfree(params.channels);
-               return -ENOBUFS;
+       if (!iwl_mvm_scan_fits(mvm, req->n_ssids, ies, params.n_channels)) {
+               ret = -ENOBUFS;
+               goto out;
        }
 
        uid = iwl_mvm_build_scan_cmd(mvm, vif, &hcmd, &params, type);
-
-       if (non_psc_included)
-               kfree(params.channels);
-       if (uid < 0)
-               return uid;
+       if (uid < 0) {
+               ret = uid;
+               goto out;
+       }
 
        ret = iwl_mvm_send_cmd(mvm, &hcmd);
        if (!ret) {
@@ -3197,6 +3195,9 @@ int iwl_mvm_sched_scan_start(struct iwl_mvm *mvm,
                mvm->sched_scan_pass_all = SCHED_SCAN_PASS_ALL_DISABLED;
        }
 
+out:
+       if (non_psc_included)
+               kfree(params.channels);
        return ret;
 }