diff options
author | Jouni Malinen <j@w1.fi> | 2014-07-24 16:55:15 (GMT) |
---|---|---|
committer | Jouni Malinen <j@w1.fi> | 2014-07-24 17:12:57 (GMT) |
commit | 1f1fe195cd8907badca6d4ee17e5fa638b6f83db (patch) | |
tree | 2be30f26134ae9a214c69d9aee8c277358a70586 /src/eap_peer/eap_pwd.c | |
parent | f119d6694250d5ac4105da72ddbdbe793251d230 (diff) | |
download | hostap-1f1fe195cd8907badca6d4ee17e5fa638b6f83db.zip hostap-1f1fe195cd8907badca6d4ee17e5fa638b6f83db.tar.gz hostap-1f1fe195cd8907badca6d4ee17e5fa638b6f83db.tar.bz2 |
EAP-pwd: Clear identity string and temporary buffer explicitly
Use an explicit memset call to clear any configuration parameter and
dynamic data that contains private information like keys or identity.
This brings in an additional layer of protection by reducing the length
of time this type of private data is kept in memory.
Signed-off-by: Jouni Malinen <j@w1.fi>
Diffstat (limited to 'src/eap_peer/eap_pwd.c')
-rw-r--r-- | src/eap_peer/eap_pwd.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c index fd5c2f0..1c915ed 100644 --- a/src/eap_peer/eap_pwd.c +++ b/src/eap_peer/eap_pwd.c @@ -123,7 +123,7 @@ static void * eap_pwd_init(struct eap_sm *sm) if ((data->password = os_malloc(password_len)) == NULL) { wpa_printf(MSG_INFO, "EAP-PWD: memory allocation psk fail"); BN_CTX_free(data->bnctx); - os_free(data->id_peer); + bin_clear_free(data->id_peer, data->id_peer_len); os_free(data); return NULL; } @@ -155,8 +155,8 @@ static void eap_pwd_deinit(struct eap_sm *sm, void *priv) BN_CTX_free(data->bnctx); EC_POINT_clear_free(data->my_element); EC_POINT_clear_free(data->server_element); - os_free(data->id_peer); - os_free(data->id_server); + bin_clear_free(data->id_peer, data->id_peer_len); + bin_clear_free(data->id_server, data->id_server_len); bin_clear_free(data->password, data->password_len); if (data->grp) { EC_GROUP_free(data->grp->group); @@ -684,7 +684,7 @@ eap_pwd_perform_confirm_exchange(struct eap_sm *sm, struct eap_pwd_data *data, wpabuf_put_data(data->outbuf, conf, SHA256_MAC_LEN); fin: - os_free(cruft); + bin_clear_free(cruft, BN_num_bytes(data->grp->prime)); BN_clear_free(x); BN_clear_free(y); if (data->outbuf == NULL) { |