diff --git a/src/wps/wps_er.c b/src/wps/wps_er.c index f29eb9c09..d750ecdb2 100644 --- a/src/wps/wps_er.c +++ b/src/wps/wps_er.c @@ -85,6 +85,7 @@ static void wps_er_sta_free(struct wps_er_sta *sta) os_free(sta->dev_name); http_client_free(sta->http); eloop_cancel_timeout(wps_er_sta_timeout, sta, NULL); + os_free(sta->cred); os_free(sta); } @@ -953,6 +954,17 @@ static void wps_er_sta_start(struct wps_er_sta *sta, struct wpabuf *msg) return; sta->wps->er = 1; sta->wps->use_cred = sta->ap->ap_settings; + if (sta->ap->ap_settings) { + os_free(sta->cred); + sta->cred = os_malloc(sizeof(*sta->cred)); + if (sta->cred) { + os_memcpy(sta->cred, sta->ap->ap_settings, + sizeof(*sta->cred)); + sta->cred->cred_attr = NULL; + os_memcpy(sta->cred->mac_addr, sta->addr, ETH_ALEN); + sta->wps->use_cred = sta->cred; + } + } wps_er_sta_process(sta, msg, WSC_MSG); } diff --git a/src/wps/wps_er.h b/src/wps/wps_er.h index f08af913b..b13b950fb 100644 --- a/src/wps/wps_er.h +++ b/src/wps/wps_er.h @@ -33,6 +33,7 @@ struct wps_er_sta { char *dev_name; struct wps_data *wps; struct http_client *http; + struct wps_credential *cred; }; struct wps_er_ap {