.. | .. |
---|
269 | 269 | rtnl_unlock(); |
---|
270 | 270 | } |
---|
271 | 271 | |
---|
| 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 | + |
---|
272 | 281 | /* Returned bss is reference counted and must be cleaned up appropriately. */ |
---|
273 | 282 | static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev) |
---|
274 | 283 | { |
---|
.. | .. |
---|
286 | 295 | if (!bss) |
---|
287 | 296 | return NULL; |
---|
288 | 297 | |
---|
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); |
---|
293 | 299 | schedule_work(&rdev->conn_work); |
---|
294 | 300 | |
---|
295 | 301 | return bss; |
---|
.. | .. |
---|
568 | 574 | wdev->conn->params.ssid_len = wdev->ssid_len; |
---|
569 | 575 | |
---|
570 | 576 | /* 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)); |
---|
572 | 583 | |
---|
573 | 584 | if (prev_bssid) { |
---|
574 | 585 | memcpy(wdev->conn->prev_bssid, prev_bssid, ETH_ALEN); |
---|
.. | .. |
---|
579 | 590 | if (bss) { |
---|
580 | 591 | enum nl80211_timeout_reason treason; |
---|
581 | 592 | |
---|
| 593 | + cfg80211_step_auth_next(wdev->conn, bss); |
---|
582 | 594 | err = cfg80211_conn_do_work(wdev, &treason); |
---|
583 | 595 | cfg80211_put_bss(wdev->wiphy, bss); |
---|
584 | 596 | } else { |
---|
.. | .. |
---|
1245 | 1257 | } else { |
---|
1246 | 1258 | if (WARN_ON(connkeys)) |
---|
1247 | 1259 | 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; |
---|
1248 | 1267 | } |
---|
1249 | 1268 | |
---|
1250 | 1269 | wdev->connect_keys = connkeys; |
---|