If GO Negotiation Request (or in theory, also GO Negotiation Response)
frame is delivered multiple time for processing, the SSID of the group
could end up getting changed. This could result in possible issues if
the peer ended up using different SSID. To avoid this, make sure the
SSID does not get changed unless the negotiation is for a new group.
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,
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;
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;
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);
*/
size_t ssid_len;
+ /**
+ * ssid_set - Whether SSID is already set for GO Negotiation
+ */
+ int ssid_set;
+
/**
* Regulatory class for own operational channel
*/