|
@@ -38,7 +38,7 @@
|
|
|
|
|
|
|
|
|
static void wpa_send_eapol_timeout(void *eloop_ctx, void *timeout_ctx);
|
|
|
-static void wpa_sm_step(struct wpa_state_machine *sm);
|
|
|
+static int wpa_sm_step(struct wpa_state_machine *sm);
|
|
|
static int wpa_verify_key_mic(struct wpa_ptk *PTK, u8 *data, size_t data_len);
|
|
|
static void wpa_sm_call_step(void *eloop_ctx, void *timeout_ctx);
|
|
|
static void wpa_group_sm_step(struct wpa_authenticator *wpa_auth,
|
|
@@ -520,7 +520,8 @@ void wpa_auth_sta_associated(struct wpa_authenticator *wpa_auth,
|
|
|
sm->started = 1;
|
|
|
|
|
|
sm->Init = TRUE;
|
|
|
- wpa_sm_step(sm);
|
|
|
+ if (wpa_sm_step(sm) == 1)
|
|
|
+ return; /* should not really happen */
|
|
|
sm->Init = FALSE;
|
|
|
sm->AuthenticationRequest = TRUE;
|
|
|
wpa_sm_step(sm);
|
|
@@ -2059,17 +2060,17 @@ static void wpa_group_sm_step(struct wpa_authenticator *wpa_auth,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static void wpa_sm_step(struct wpa_state_machine *sm)
|
|
|
+static int wpa_sm_step(struct wpa_state_machine *sm)
|
|
|
{
|
|
|
if (sm == NULL)
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
|
|
|
if (sm->in_step_loop) {
|
|
|
/* This should not happen, but if it does, make sure we do not
|
|
|
* end up freeing the state machine too early by exiting the
|
|
|
* recursive call. */
|
|
|
wpa_printf(MSG_ERROR, "WPA: wpa_sm_step() called recursively");
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
sm->in_step_loop = 1;
|
|
@@ -2094,7 +2095,9 @@ static void wpa_sm_step(struct wpa_state_machine *sm)
|
|
|
wpa_printf(MSG_DEBUG, "WPA: Completing pending STA state "
|
|
|
"machine deinit for " MACSTR, MAC2STR(sm->addr));
|
|
|
wpa_free_sta_sm(sm);
|
|
|
+ return 1;
|
|
|
}
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
|