aboutsummaryrefslogtreecommitdiffstats
path: root/src/eap_peer
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2014-04-08 10:50:52 -0700
committerDmitry Shmidt <dimitrysh@google.com>2014-04-08 10:50:52 -0700
commit21de214b4ba4271ca20843f3b8fba9f1501b2a89 (patch)
tree8f74833823ddf246c1e6a7c76f26ef311f34afe2 /src/eap_peer
parent0cfd5f779f6cdd2f774a27bb1dec95d3940cd16a (diff)
downloadandroid_external_wpa_supplicant_8-21de214b4ba4271ca20843f3b8fba9f1501b2a89.tar.gz
android_external_wpa_supplicant_8-21de214b4ba4271ca20843f3b8fba9f1501b2a89.tar.bz2
android_external_wpa_supplicant_8-21de214b4ba4271ca20843f3b8fba9f1501b2a89.zip
Cumulative patch from commit 4a16a0bd550401a50dedfcf701f6dcc7a3598133i
4a16a0b nl80211: Add QCA vendor subcmd for NAN f8b10c1 Fix CONFIG_AP=y build without CONFIG_P2P=y f05cee9 P2P: Clear p2p_in_invitation on cancel ec331d0 WNM: Fix deinit path to clean neighbor report count 679f2e7 WPS NFC: Remove NFC_RX_HANDOVER_SEL dc39004 WPS: Remove unused WEP related functionality 9437c2d EAP-pwd peer: Fix fragmentation of PWD-Confirm-Resp 48f668e EAP-pwd: Fix memory leak on error path with fragmentation 9ff4de6 Move DROP_SA command to be within ifdef CONFIG_TESTING_OPTIONS e1a273a Remove used KDE addition code from EAPOL-Key msg 4/4 9a147ba WNM: Fix regression in Sleep Mode exit key data parsing 76d3fb1 Remove unused wpa_sm_get_param() function ed42993 TDLS: Add test mode for MIC failure testing 5784b9a Fix memory leaks in hostapd configuration updates Change-Id: I7f1ec783ac791e06178f9c8b9be9119ac46aa745 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/eap_peer')
-rw-r--r--src/eap_peer/eap_pwd.c24
-rw-r--r--src/eap_peer/eap_wsc.c2
2 files changed, 22 insertions, 4 deletions
diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
index fef47837..e4168fc0 100644
--- a/src/eap_peer/eap_pwd.c
+++ b/src/eap_peer/eap_pwd.c
@@ -16,7 +16,8 @@
struct eap_pwd_data {
enum {
- PWD_ID_Req, PWD_Commit_Req, PWD_Confirm_Req, SUCCESS, FAILURE
+ PWD_ID_Req, PWD_Commit_Req, PWD_Confirm_Req,
+ SUCCESS_ON_FRAG_COMPLETION, SUCCESS, FAILURE
} state;
u8 *id_peer;
size_t id_peer_len;
@@ -57,6 +58,8 @@ static const char * eap_pwd_state_txt(int state)
return "PWD-Commit-Req";
case PWD_Confirm_Req:
return "PWD-Confirm-Req";
+ case SUCCESS_ON_FRAG_COMPLETION:
+ return "SUCCESS_ON_FRAG_COMPLETION";
case SUCCESS:
return "SUCCESS";
case FAILURE:
@@ -161,6 +164,8 @@ static void eap_pwd_deinit(struct eap_sm *sm, void *priv)
BN_free(data->grp->prime);
os_free(data->grp);
}
+ wpabuf_free(data->inbuf);
+ wpabuf_free(data->outbuf);
os_free(data);
}
@@ -658,13 +663,12 @@ fin:
os_free(cruft);
BN_free(x);
BN_free(y);
- ret->methodState = METHOD_DONE;
if (data->outbuf == NULL) {
+ ret->methodState = METHOD_DONE;
ret->decision = DECISION_FAIL;
eap_pwd_state(data, FAILURE);
} else {
- ret->decision = DECISION_UNCOND_SUCC;
- eap_pwd_state(data, SUCCESS);
+ eap_pwd_state(data, SUCCESS_ON_FRAG_COMPLETION);
}
}
@@ -741,6 +745,11 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
wpa_printf(MSG_DEBUG, "EAP-pwd: Send %s fragment of %d bytes",
data->out_frag_pos == 0 ? "last" : "next",
(int) len);
+ if (data->state == SUCCESS_ON_FRAG_COMPLETION) {
+ ret->methodState = METHOD_DONE;
+ ret->decision = DECISION_UNCOND_SUCC;
+ eap_pwd_state(data, SUCCESS);
+ }
return resp;
}
@@ -773,6 +782,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
(int) data->in_frag_pos,
(int) wpabuf_len(data->inbuf));
wpabuf_free(data->inbuf);
+ data->inbuf = NULL;
data->in_frag_pos = 0;
return NULL;
}
@@ -824,6 +834,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
*/
if (data->in_frag_pos) {
wpabuf_free(data->inbuf);
+ data->inbuf = NULL;
data->in_frag_pos = 0;
}
@@ -871,6 +882,11 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
wpabuf_free(data->outbuf);
data->outbuf = NULL;
data->out_frag_pos = 0;
+ if (data->state == SUCCESS_ON_FRAG_COMPLETION) {
+ ret->methodState = METHOD_DONE;
+ ret->decision = DECISION_UNCOND_SUCC;
+ eap_pwd_state(data, SUCCESS);
+ }
}
return resp;
diff --git a/src/eap_peer/eap_wsc.c b/src/eap_peer/eap_wsc.c
index 6bdd3411..23e98237 100644
--- a/src/eap_peer/eap_wsc.c
+++ b/src/eap_peer/eap_wsc.c
@@ -106,8 +106,10 @@ static int eap_wsc_new_ap_settings(struct wps_credential *cred,
}
if (os_strncmp(pos + 9, "NONE", 4) == 0)
cred->encr_type = WPS_ENCR_NONE;
+#ifdef CONFIG_TESTING_OPTIONS
else if (os_strncmp(pos + 9, "WEP", 3) == 0)
cred->encr_type = WPS_ENCR_WEP;
+#endif /* CONFIG_TESTING_OPTIONS */
else if (os_strncmp(pos + 9, "TKIP", 4) == 0)
cred->encr_type = WPS_ENCR_TKIP;
else if (os_strncmp(pos + 9, "CCMP", 4) == 0)