From: Po-Lun Lai Date: Fri, 17 Jan 2014 17:35:03 +0000 (+0200) Subject: P2P: Allow GO Negotiation Request to update peer entry after PD X-Git-Tag: hostap_2_1~115 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3eaaca1a0b372f31ddc43d152c3681dce48889bb;p=thirdparty%2Fhostap.git P2P: Allow GO Negotiation Request to update peer entry after PD Previously, GO Negotiation Request frame was used to update a peer entry if only a Probe Request from that peer had been received. However, it would be possible, even if unlikely, for a peer to be discovered based on receiving Provision Discovery Request frame from it and no Probe Request frame. In such a case, the Listen frequency of the peer would not be known and group formation could not be (re-)initialized with that peer. Fix this by allowing the GO Negotiation Request frame to update peer entry if the current peer entry does not include Listen or Operating frequency. Signed-hostap: Jouni Malinen --- diff --git a/src/p2p/p2p_go_neg.c b/src/p2p/p2p_go_neg.c index 874f43417..a887a5e11 100644 --- a/src/p2p/p2p_go_neg.c +++ b/src/p2p/p2p_go_neg.c @@ -590,6 +590,18 @@ void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa, dev = p2p_add_dev_from_go_neg_req(p2p, sa, &msg); else if (dev->flags & P2P_DEV_PROBE_REQ_ONLY) p2p_add_dev_info(p2p, sa, dev, &msg); + else if (!dev->listen_freq && !dev->oper_freq) { + /* + * This may happen if the peer entry was added based on PD + * Request and no Probe Request/Response frame has been received + * from this peer (or that information has timed out). + */ + p2p_dbg(p2p, "Update peer " MACSTR + " based on GO Neg Req since listen/oper freq not known", + MAC2STR(dev->info.p2p_device_addr)); + p2p_add_dev_info(p2p, sa, dev, &msg); + } + if (dev && dev->flags & P2P_DEV_USER_REJECTED) { p2p_dbg(p2p, "User has rejected this peer"); status = P2P_SC_FAIL_REJECTED_BY_USER;