TNC: Fix a stray pointer that could cause segfault on error path
On "eap_tnc_process" function error case, data->in_buf keeps reference to a local scope variable. For example this will cause segmentation fault in "eap_tnc_deinit" function "wpabuf_free(data->in_buf)" statement.
This commit is contained in:
parent
c590cb67d4
commit
2943799678
1 changed files with 8 additions and 3 deletions
|
@ -295,7 +295,7 @@ static struct wpabuf * eap_tnc_process(struct eap_sm *sm, void *priv,
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TNC: Server did not use "
|
wpa_printf(MSG_DEBUG, "EAP-TNC: Server did not use "
|
||||||
"start flag in the first message");
|
"start flag in the first message");
|
||||||
ret->ignore = TRUE;
|
ret->ignore = TRUE;
|
||||||
return NULL;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
tncc_init_connection(data->tncc);
|
tncc_init_connection(data->tncc);
|
||||||
|
@ -308,7 +308,7 @@ static struct wpabuf * eap_tnc_process(struct eap_sm *sm, void *priv,
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TNC: Server used start "
|
wpa_printf(MSG_DEBUG, "EAP-TNC: Server used start "
|
||||||
"flag again");
|
"flag again");
|
||||||
ret->ignore = TRUE;
|
ret->ignore = TRUE;
|
||||||
return NULL;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = tncc_process_if_tnccs(data->tncc,
|
res = tncc_process_if_tnccs(data->tncc,
|
||||||
|
@ -317,7 +317,7 @@ static struct wpabuf * eap_tnc_process(struct eap_sm *sm, void *priv,
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case TNCCS_PROCESS_ERROR:
|
case TNCCS_PROCESS_ERROR:
|
||||||
ret->ignore = TRUE;
|
ret->ignore = TRUE;
|
||||||
return NULL;
|
goto fail;
|
||||||
case TNCCS_PROCESS_OK_NO_RECOMMENDATION:
|
case TNCCS_PROCESS_OK_NO_RECOMMENDATION:
|
||||||
case TNCCS_RECOMMENDATION_ERROR:
|
case TNCCS_RECOMMENDATION_ERROR:
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TNC: No "
|
wpa_printf(MSG_DEBUG, "EAP-TNC: No "
|
||||||
|
@ -404,6 +404,11 @@ static struct wpabuf * eap_tnc_process(struct eap_sm *sm, void *priv,
|
||||||
data->out_buf = resp;
|
data->out_buf = resp;
|
||||||
data->state = PROC_MSG;
|
data->state = PROC_MSG;
|
||||||
return eap_tnc_build_msg(data, ret, id);
|
return eap_tnc_build_msg(data, ret, id);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
if (data->in_buf == &tmpbuf)
|
||||||
|
data->in_buf = NULL;
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue