mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 16:58:41 -05:00
EAP-pwd: Fix processing of group setup failure
If invalid group was negotiated, compute_password_element() left some of the data->grp pointer uninitialized and this could result in segmentation fault when deinitializing the EAP method. Fix this by explicitly clearing all the pointer with eap_zalloc(). In addition, speed up EAP failure reporting in this type of error case by indicating that the EAP method execution cannot continue anymore on the peer side instead of waiting for a timeout. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
cb4ac38b15
commit
0f73c642cc
@ -252,8 +252,8 @@ eap_pwd_perform_id_exchange(struct eap_sm *sm, struct eap_pwd_data *data,
|
|||||||
wpa_hexdump_ascii(MSG_INFO, "EAP-PWD (peer): server sent id of",
|
wpa_hexdump_ascii(MSG_INFO, "EAP-PWD (peer): server sent id of",
|
||||||
data->id_server, data->id_server_len);
|
data->id_server, data->id_server_len);
|
||||||
|
|
||||||
if ((data->grp = (EAP_PWD_group *) os_malloc(sizeof(EAP_PWD_group))) ==
|
data->grp = os_zalloc(sizeof(EAP_PWD_group));
|
||||||
NULL) {
|
if (data->grp == NULL) {
|
||||||
wpa_printf(MSG_INFO, "EAP-PWD: failed to allocate memory for "
|
wpa_printf(MSG_INFO, "EAP-PWD: failed to allocate memory for "
|
||||||
"group");
|
"group");
|
||||||
eap_pwd_state(data, FAILURE);
|
eap_pwd_state(data, FAILURE);
|
||||||
@ -858,8 +858,11 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
|
|||||||
data->in_frag_pos = 0;
|
data->in_frag_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->outbuf == NULL)
|
if (data->outbuf == NULL) {
|
||||||
|
ret->methodState = METHOD_DONE;
|
||||||
|
ret->decision = DECISION_FAIL;
|
||||||
return NULL; /* generic failure */
|
return NULL; /* generic failure */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we have output! Do we need to fragment it?
|
* we have output! Do we need to fragment it?
|
||||||
|
@ -599,7 +599,8 @@ static void eap_pwd_process_id_resp(struct eap_sm *sm,
|
|||||||
wpa_hexdump_ascii(MSG_DEBUG, "EAP-PWD (server): peer sent id of",
|
wpa_hexdump_ascii(MSG_DEBUG, "EAP-PWD (server): peer sent id of",
|
||||||
data->id_peer, data->id_peer_len);
|
data->id_peer, data->id_peer_len);
|
||||||
|
|
||||||
if ((data->grp = os_malloc(sizeof(EAP_PWD_group))) == NULL) {
|
data->grp = os_zalloc(sizeof(EAP_PWD_group));
|
||||||
|
if (data->grp == NULL) {
|
||||||
wpa_printf(MSG_INFO, "EAP-PWD: failed to allocate memory for "
|
wpa_printf(MSG_INFO, "EAP-PWD: failed to allocate memory for "
|
||||||
"group");
|
"group");
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user