]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/wireless/sme.c
cfg80211: Allow reassociation to be requested with internal SME
[mirror_ubuntu-bionic-kernel.git] / net / wireless / sme.c
index 65882d2777c0e9985122041d4674e5dd3dc1d067..1fba41676428ce5e3a54d797cc494d06e432ebaa 100644 (file)
@@ -492,8 +492,18 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
        if (!rdev->ops->auth || !rdev->ops->assoc)
                return -EOPNOTSUPP;
 
-       if (wdev->current_bss)
-               return -EALREADY;
+       if (wdev->current_bss) {
+               if (!prev_bssid)
+                       return -EALREADY;
+               if (prev_bssid &&
+                   !ether_addr_equal(prev_bssid, wdev->current_bss->pub.bssid))
+                       return -ENOTCONN;
+               cfg80211_unhold_bss(wdev->current_bss);
+               cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
+               wdev->current_bss = NULL;
+
+               cfg80211_sme_free(wdev);
+       }
 
        if (WARN_ON(wdev->conn))
                return -EINPROGRESS;