diff options
Diffstat (limited to 'net/wireless/mlme.c')
| -rw-r--r-- | net/wireless/mlme.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 8016fee0752b..904a7f368325 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c | |||
| @@ -457,20 +457,14 @@ int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | |||
| 457 | .reason_code = reason, | 457 | .reason_code = reason, |
| 458 | .ie = ie, | 458 | .ie = ie, |
| 459 | .ie_len = ie_len, | 459 | .ie_len = ie_len, |
| 460 | .local_state_change = local_state_change, | ||
| 460 | }; | 461 | }; |
| 461 | 462 | ||
| 462 | ASSERT_WDEV_LOCK(wdev); | 463 | ASSERT_WDEV_LOCK(wdev); |
| 463 | 464 | ||
| 464 | if (local_state_change) { | 465 | if (local_state_change && (!wdev->current_bss || |
| 465 | if (wdev->current_bss && | 466 | !ether_addr_equal(wdev->current_bss->pub.bssid, bssid))) |
| 466 | ether_addr_equal(wdev->current_bss->pub.bssid, bssid)) { | ||
| 467 | cfg80211_unhold_bss(wdev->current_bss); | ||
| 468 | cfg80211_put_bss(&wdev->current_bss->pub); | ||
| 469 | wdev->current_bss = NULL; | ||
| 470 | } | ||
| 471 | |||
| 472 | return 0; | 467 | return 0; |
| 473 | } | ||
| 474 | 468 | ||
| 475 | return rdev->ops->deauth(&rdev->wiphy, dev, &req); | 469 | return rdev->ops->deauth(&rdev->wiphy, dev, &req); |
| 476 | } | 470 | } |
