diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 53b8338..854816b 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2524,6 +2524,13 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 				data->assoc_reject.status_code);
 		if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)
 			sme_event_assoc_reject(wpa_s, data);
+		else
+			/* We could wait for the auth timer to fire, but it is
+			 * much faster to abort locally sooner rather than
+			 * later.
+			 */
+			wpa_supplicant_event_disassoc_finish(wpa_s,
+				data->assoc_reject.status_code, 1);
 		break;
 	case EVENT_AUTH_TIMED_OUT:
 		if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)
