WPS: Fix use of pre-configured DH keys with multiple operations

wps_build_public_key() takes the dh_ctx into use and another attempt to
use the same DH keys fails with wps->dh_ctx being set to NULL. Avoid
this by using the DH parameters only if dh_ctx is valid. This fixes
cases where a use of local pre-configured DH keys followed by an
operating using peer DH keys would faild due to unexpected attempt to
use local keys again.

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2013-04-01 19:30:34 +03:00
parent 5c9d63d46f
commit 49e160a58d

View file

@ -25,12 +25,9 @@ int wps_build_public_key(struct wps_data *wps, struct wpabuf *msg)
wpa_printf(MSG_DEBUG, "WPS: * Public Key"); wpa_printf(MSG_DEBUG, "WPS: * Public Key");
wpabuf_free(wps->dh_privkey); wpabuf_free(wps->dh_privkey);
wps->dh_privkey = NULL; wps->dh_privkey = NULL;
if (wps->dev_pw_id != DEV_PW_DEFAULT && wps->wps->dh_privkey) { if (wps->dev_pw_id != DEV_PW_DEFAULT && wps->wps->dh_privkey &&
wps->wps->dh_ctx) {
wpa_printf(MSG_DEBUG, "WPS: Using pre-configured DH keys"); wpa_printf(MSG_DEBUG, "WPS: Using pre-configured DH keys");
if (wps->wps->dh_ctx == NULL) {
wpa_printf(MSG_DEBUG, "WPS: wps->wps->dh_ctx == NULL");
return -1;
}
if (wps->wps->dh_pubkey == NULL) { if (wps->wps->dh_pubkey == NULL) {
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"WPS: wps->wps->dh_pubkey == NULL"); "WPS: wps->wps->dh_pubkey == NULL");