diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c index 25d4d55e5..259f85422 100644 --- a/src/p2p/p2p.c +++ b/src/p2p/p2p.c @@ -1047,6 +1047,7 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr, if (p2p_prepare_channel(p2p, force_freq) < 0) return -1; + p2p->ssid_set = 0; dev = p2p_get_device(p2p, peer_addr); if (dev == NULL || (dev->flags & P2P_DEV_PROBE_REQ_ONLY)) { wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG, @@ -1314,6 +1315,7 @@ void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer) res.peer_config_timeout = go ? peer->client_timeout : peer->go_timeout; p2p_clear_timeout(p2p); + p2p->ssid_set = 0; peer->go_neg_req_sent = 0; peer->wps_method = WPS_NOT_READY; diff --git a/src/p2p/p2p_go_neg.c b/src/p2p/p2p_go_neg.c index be04fadf8..b506a80b9 100644 --- a/src/p2p/p2p_go_neg.c +++ b/src/p2p/p2p_go_neg.c @@ -581,7 +581,10 @@ void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa, p2p->op_channel)) p2p_reselect_channel(p2p, &intersection); - p2p_build_ssid(p2p, p2p->ssid, &p2p->ssid_len); + if (!p2p->ssid_set) { + p2p_build_ssid(p2p, p2p->ssid, &p2p->ssid_len); + p2p->ssid_set = 1; + } } dev->go_state = go ? LOCAL_GO : REMOTE_GO; @@ -950,7 +953,10 @@ void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa, p2p->op_channel)) p2p_reselect_channel(p2p, &intersection); - p2p_build_ssid(p2p, p2p->ssid, &p2p->ssid_len); + if (!p2p->ssid_set) { + p2p_build_ssid(p2p, p2p->ssid, &p2p->ssid_len); + p2p->ssid_set = 1; + } } p2p_set_state(p2p, P2P_GO_NEG); diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h index 52d931165..0e7313686 100644 --- a/src/p2p/p2p_i.h +++ b/src/p2p/p2p_i.h @@ -272,6 +272,11 @@ struct p2p_data { */ size_t ssid_len; + /** + * ssid_set - Whether SSID is already set for GO Negotiation + */ + int ssid_set; + /** * Regulatory class for own operational channel */