EAP-TTLS peer: Fix success after fragmented final Phase 2 message
If the final Phase 2 message needed fragmentation, EAP method decision was cleared from UNCOND_SUCC or COND_SUCC to FAIL and that resulted in the authentication failing when the EAP-Success message from the server got rejected. Fix this by restoring the EAP method decision after fragmentation. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
1a6f86593b
commit
0daa9f6a13
1 changed files with 15 additions and 0 deletions
|
@ -35,6 +35,7 @@ struct eap_ttls_data {
|
||||||
void *phase2_priv;
|
void *phase2_priv;
|
||||||
int phase2_success;
|
int phase2_success;
|
||||||
int phase2_start;
|
int phase2_start;
|
||||||
|
EapDecision decision_succ;
|
||||||
|
|
||||||
enum phase2_types {
|
enum phase2_types {
|
||||||
EAP_TTLS_PHASE2_EAP,
|
EAP_TTLS_PHASE2_EAP,
|
||||||
|
@ -1547,6 +1548,7 @@ static void eap_ttls_check_auth_status(struct eap_sm *sm,
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TTLS: Authentication "
|
wpa_printf(MSG_DEBUG, "EAP-TTLS: Authentication "
|
||||||
"completed successfully");
|
"completed successfully");
|
||||||
data->phase2_success = 1;
|
data->phase2_success = 1;
|
||||||
|
data->decision_succ = ret->decision;
|
||||||
#ifdef EAP_TNC
|
#ifdef EAP_TNC
|
||||||
if (!data->ready_for_tnc && !data->tnc_started) {
|
if (!data->ready_for_tnc && !data->tnc_started) {
|
||||||
/*
|
/*
|
||||||
|
@ -1564,6 +1566,18 @@ static void eap_ttls_check_auth_status(struct eap_sm *sm,
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TTLS: Authentication "
|
wpa_printf(MSG_DEBUG, "EAP-TTLS: Authentication "
|
||||||
"completed successfully (MAY_CONT)");
|
"completed successfully (MAY_CONT)");
|
||||||
data->phase2_success = 1;
|
data->phase2_success = 1;
|
||||||
|
data->decision_succ = ret->decision;
|
||||||
|
} else if (data->decision_succ != DECISION_FAIL &&
|
||||||
|
data->phase2_success &&
|
||||||
|
!data->ssl.tls_out) {
|
||||||
|
/*
|
||||||
|
* This is needed to cover the case where the final Phase 2
|
||||||
|
* message gets fragmented since fragmentation clears
|
||||||
|
* decision back to FAIL.
|
||||||
|
*/
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"EAP-TTLS: Restore success decision after fragmented frame sent completely");
|
||||||
|
ret->decision = data->decision_succ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1638,6 +1652,7 @@ static void eap_ttls_deinit_for_reauth(struct eap_sm *sm, void *priv)
|
||||||
data->pending_phase2_req = NULL;
|
data->pending_phase2_req = NULL;
|
||||||
wpabuf_free(data->pending_resp);
|
wpabuf_free(data->pending_resp);
|
||||||
data->pending_resp = NULL;
|
data->pending_resp = NULL;
|
||||||
|
data->decision_succ = DECISION_FAIL;
|
||||||
#ifdef EAP_TNC
|
#ifdef EAP_TNC
|
||||||
data->ready_for_tnc = 0;
|
data->ready_for_tnc = 0;
|
||||||
data->tnc_started = 0;
|
data->tnc_started = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue