hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/net/wireless/sme.c
....@@ -269,6 +269,15 @@
269269 rtnl_unlock();
270270 }
271271
272
+static void cfg80211_step_auth_next(struct cfg80211_conn *conn,
273
+ struct cfg80211_bss *bss)
274
+{
275
+ memcpy(conn->bssid, bss->bssid, ETH_ALEN);
276
+ conn->params.bssid = conn->bssid;
277
+ conn->params.channel = bss->channel;
278
+ conn->state = CFG80211_CONN_AUTHENTICATE_NEXT;
279
+}
280
+
272281 /* Returned bss is reference counted and must be cleaned up appropriately. */
273282 static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev)
274283 {
....@@ -286,10 +295,7 @@
286295 if (!bss)
287296 return NULL;
288297
289
- memcpy(wdev->conn->bssid, bss->bssid, ETH_ALEN);
290
- wdev->conn->params.bssid = wdev->conn->bssid;
291
- wdev->conn->params.channel = bss->channel;
292
- wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT;
298
+ cfg80211_step_auth_next(wdev->conn, bss);
293299 schedule_work(&rdev->conn_work);
294300
295301 return bss;
....@@ -568,7 +574,12 @@
568574 wdev->conn->params.ssid_len = wdev->ssid_len;
569575
570576 /* see if we have the bss already */
571
- bss = cfg80211_get_conn_bss(wdev);
577
+ bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel,
578
+ wdev->conn->params.bssid,
579
+ wdev->conn->params.ssid,
580
+ wdev->conn->params.ssid_len,
581
+ wdev->conn_bss_type,
582
+ IEEE80211_PRIVACY(wdev->conn->params.privacy));
572583
573584 if (prev_bssid) {
574585 memcpy(wdev->conn->prev_bssid, prev_bssid, ETH_ALEN);
....@@ -579,6 +590,7 @@
579590 if (bss) {
580591 enum nl80211_timeout_reason treason;
581592
593
+ cfg80211_step_auth_next(wdev->conn, bss);
582594 err = cfg80211_conn_do_work(wdev, &treason);
583595 cfg80211_put_bss(wdev->wiphy, bss);
584596 } else {
....@@ -1245,6 +1257,13 @@
12451257 } else {
12461258 if (WARN_ON(connkeys))
12471259 return -EINVAL;
1260
+
1261
+ /* connect can point to wdev->wext.connect which
1262
+ * can hold key data from a previous connection
1263
+ */
1264
+ connect->key = NULL;
1265
+ connect->key_len = 0;
1266
+ connect->key_idx = 0;
12481267 }
12491268
12501269 wdev->connect_keys = connkeys;