WPS: Fix use of pre-configured DH keys with multiple operations
authorJouni Malinen <j@w1.fi>
Mon, 1 Apr 2013 16:30:34 +0000 (19:30 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 1 Apr 2013 16:30:34 +0000 (19:30 +0300)
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>

src/wps/wps_attr_build.c

index a7e9ad7..edcc18c 100644 (file)
@@ -25,12 +25,9 @@ int wps_build_public_key(struct wps_data *wps, struct wpabuf *msg)
        wpa_printf(MSG_DEBUG, "WPS:  * Public Key");
        wpabuf_free(wps->dh_privkey);
        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");
-               if (wps->wps->dh_ctx == NULL) {
-                       wpa_printf(MSG_DEBUG, "WPS: wps->wps->dh_ctx == NULL");
-                       return -1;
-               }
                if (wps->wps->dh_pubkey == NULL) {
                        wpa_printf(MSG_DEBUG,
                                   "WPS: wps->wps->dh_pubkey == NULL");