locally_generated, GFP_KERNEL);
        }
        clear_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state);
+       clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &vif->sme_state);
+       clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &vif->sme_state);
        clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status);
        brcmf_btcoex_set_mode(vif, BRCMF_BTCOEX_ENABLED, 0);
        if (vif->profile.use_fwsup != BRCMF_PROFILE_FWSUP_NONE) {
 
        clear_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state);
        clear_bit(BRCMF_VIF_STATUS_CONNECTING, &ifp->vif->sme_state);
+       clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &ifp->vif->sme_state);
+       clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &ifp->vif->sme_state);
        cfg80211_disconnected(ndev, reason_code, NULL, 0, true, GFP_KERNEL);
 
        memcpy(&scbval.ea, &profile->bssid, ETH_ALEN);
                                &ifp->vif->sme_state);
                        conn_params.status = WLAN_STATUS_SUCCESS;
                } else {
+                       clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS,
+                                 &ifp->vif->sme_state);
+                       clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS,
+                                 &ifp->vif->sme_state);
                        conn_params.status = WLAN_STATUS_AUTH_TIMEOUT;
                }
                conn_params.links[0].bssid = profile->bssid;
        } else if (brcmf_is_linkdown(ifp->vif, e)) {
                brcmf_dbg(CONN, "Linkdown\n");
                if (!brcmf_is_ibssmode(ifp->vif) &&
-                   test_bit(BRCMF_VIF_STATUS_CONNECTED,
-                            &ifp->vif->sme_state)) {
-                       if (memcmp(profile->bssid, e->addr, ETH_ALEN))
+                   (test_bit(BRCMF_VIF_STATUS_CONNECTED,
+                             &ifp->vif->sme_state) ||
+                    test_bit(BRCMF_VIF_STATUS_CONNECTING,
+                             &ifp->vif->sme_state))) {
+                       if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
+                                    &ifp->vif->sme_state) &&
+                           memcmp(profile->bssid, e->addr, ETH_ALEN))
                                return err;
 
                        brcmf_bss_connect_done(cfg, ndev, e, false);