mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-02-16 23:40:43 +01:00
eap-aka: added EAP reset_state
This commit is contained in:
parent
789eb08bc9
commit
96374f47e5
@ -171,6 +171,7 @@ static void check_milenage_cb(const uint8_t *res, const uint8_t *ck,
|
|||||||
* challenge packet.
|
* challenge packet.
|
||||||
*/
|
*/
|
||||||
l_free(aka->chal_pkt);
|
l_free(aka->chal_pkt);
|
||||||
|
aka->chal_pkt = NULL;
|
||||||
|
|
||||||
pos += eap_sim_build_header(eap, aka->type,
|
pos += eap_sim_build_header(eap, aka->type,
|
||||||
EAP_AKA_ST_SYNC_FAILURE, pos, 24);
|
EAP_AKA_ST_SYNC_FAILURE, pos, 24);
|
||||||
@ -182,10 +183,8 @@ static void check_milenage_cb(const uint8_t *res, const uint8_t *ck,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!res || !ck || !ik) {
|
if (!res || !ck || !ik)
|
||||||
l_free(aka->chal_pkt);
|
|
||||||
goto chal_error;
|
goto chal_error;
|
||||||
}
|
|
||||||
|
|
||||||
if (aka->type == EAP_TYPE_AKA_PRIME) {
|
if (aka->type == EAP_TYPE_AKA_PRIME) {
|
||||||
if (!eap_aka_derive_primes(ck, ik, aka->autn,
|
if (!eap_aka_derive_primes(ck, ik, aka->autn,
|
||||||
@ -218,7 +217,6 @@ static void check_milenage_cb(const uint8_t *res, const uint8_t *ck,
|
|||||||
if (!eap_sim_verify_mac(eap, aka->type, aka->chal_pkt, aka->pkt_len,
|
if (!eap_sim_verify_mac(eap, aka->type, aka->chal_pkt, aka->pkt_len,
|
||||||
aka->k_aut, NULL, 0)) {
|
aka->k_aut, NULL, 0)) {
|
||||||
l_error("MAC was not valid");
|
l_error("MAC was not valid");
|
||||||
l_free(aka->chal_pkt);
|
|
||||||
goto chal_error;
|
goto chal_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,6 +241,7 @@ static void check_milenage_cb(const uint8_t *res, const uint8_t *ck,
|
|||||||
}
|
}
|
||||||
|
|
||||||
l_free(aka->chal_pkt);
|
l_free(aka->chal_pkt);
|
||||||
|
aka->chal_pkt = NULL;
|
||||||
|
|
||||||
eap_send_response(eap, aka->type, response, resp_len);
|
eap_send_response(eap, aka->type, response, resp_len);
|
||||||
|
|
||||||
@ -262,6 +261,8 @@ chal_fatal:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
chal_error:
|
chal_error:
|
||||||
|
l_free(aka->chal_pkt);
|
||||||
|
aka->chal_pkt = NULL;
|
||||||
eap_sim_client_error(eap, aka->type, EAP_SIM_ERROR_PROCESS);
|
eap_sim_client_error(eap, aka->type, EAP_SIM_ERROR_PROCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,6 +411,7 @@ static void handle_challenge(struct eap_state *eap, const uint8_t *pkt,
|
|||||||
if (sim_auth_check_milenage(aka->auth, rand, autn, check_milenage_cb,
|
if (sim_auth_check_milenage(aka->auth, rand, autn, check_milenage_cb,
|
||||||
eap) < 0) {
|
eap) < 0) {
|
||||||
l_free(aka->chal_pkt);
|
l_free(aka->chal_pkt);
|
||||||
|
aka->chal_pkt = NULL;
|
||||||
goto chal_error;
|
goto chal_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,6 +681,28 @@ static bool eap_aka_prime_load_settings(struct eap_state *eap,
|
|||||||
return eap_aka_common_load_settings(eap, settings, prefix);
|
return eap_aka_common_load_settings(eap, settings, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool eap_aka_reset_state(struct eap_state *eap)
|
||||||
|
{
|
||||||
|
struct eap_aka_handle *aka = eap_get_data(eap);
|
||||||
|
|
||||||
|
aka->state = EAP_AKA_STATE_UNCONNECTED;
|
||||||
|
|
||||||
|
l_free(aka->kdf_in);
|
||||||
|
aka->kdf_in = NULL;
|
||||||
|
l_free(aka->chal_pkt);
|
||||||
|
aka->chal_pkt = NULL;
|
||||||
|
|
||||||
|
memset(aka->mk, 0, sizeof(aka->mk));
|
||||||
|
memset(aka->k_encr, 0, sizeof(aka->k_encr));
|
||||||
|
memset(aka->k_aut, 0, sizeof(aka->k_aut));
|
||||||
|
memset(aka->msk, 0, sizeof(aka->msk));
|
||||||
|
memset(aka->emsk, 0, sizeof(aka->emsk));
|
||||||
|
memset(aka->k_re, 0, sizeof(aka->k_re));
|
||||||
|
memset(aka->autn, 0, sizeof(aka->autn));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static struct eap_method eap_aka = {
|
static struct eap_method eap_aka = {
|
||||||
.request_type = EAP_TYPE_AKA,
|
.request_type = EAP_TYPE_AKA,
|
||||||
.exports_msk = true,
|
.exports_msk = true,
|
||||||
@ -687,7 +711,8 @@ static struct eap_method eap_aka = {
|
|||||||
.handle_request = eap_aka_handle_request,
|
.handle_request = eap_aka_handle_request,
|
||||||
.check_settings = eap_aka_check_settings,
|
.check_settings = eap_aka_check_settings,
|
||||||
.load_settings = eap_aka_load_settings,
|
.load_settings = eap_aka_load_settings,
|
||||||
.get_identity = eap_aka_get_identity
|
.get_identity = eap_aka_get_identity,
|
||||||
|
.reset_state = eap_aka_reset_state
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct eap_method eap_aka_prime = {
|
static struct eap_method eap_aka_prime = {
|
||||||
@ -698,7 +723,8 @@ static struct eap_method eap_aka_prime = {
|
|||||||
.handle_request = eap_aka_handle_request,
|
.handle_request = eap_aka_handle_request,
|
||||||
.check_settings = eap_aka_check_settings,
|
.check_settings = eap_aka_check_settings,
|
||||||
.load_settings = eap_aka_prime_load_settings,
|
.load_settings = eap_aka_prime_load_settings,
|
||||||
.get_identity = eap_aka_get_identity
|
.get_identity = eap_aka_get_identity,
|
||||||
|
.reset_state = eap_aka_reset_state
|
||||||
};
|
};
|
||||||
|
|
||||||
static int eap_aka_init(void)
|
static int eap_aka_init(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user