P2P: Indicate GO Negotiation failure on peer expiration

If P2P device expires while a GO Negotiation is in progress, currently
p2p->go_neg_peer is cleared without indicating GO Nego failure. This
will result in pending group interfaces to be left over. This patch will
indicate GO Negotiation failure and will remove any pending group
interfaces.

This patch addresses a corner case in GO-Negotiation case. Consider the
scenario where two devices A and B are in discovery stage and Device B
vanishes [moves out of range] when a connect is issued on the Device A.
Then Device A keeps on retrying the GO Negotiation Request till the
retry limit is reached. On reaching retry limit, the pending group
interface is removed. But suppose if the peer entry in the device list
expires before the retry limit is reached, then pending group interface
was not removed.

Signed-off-by: Jithu Jance <jithu@broadcom.com>
This commit is contained in:
Jithu Jance 2011-11-18 23:13:03 +02:00 committed by Jouni Malinen
parent 1966e3d1b7
commit 5cfda25e44

View File

@ -627,8 +627,13 @@ static void p2p_device_free(struct p2p_data *p2p, struct p2p_device *dev)
{ {
int i; int i;
if (p2p->go_neg_peer == dev) if (p2p->go_neg_peer == dev) {
/*
* If GO Negotiation is in progress, report that it has failed.
*/
p2p_go_neg_failed(p2p, dev, -1);
p2p->go_neg_peer = NULL; p2p->go_neg_peer = NULL;
}
if (p2p->invite_peer == dev) if (p2p->invite_peer == dev)
p2p->invite_peer = NULL; p2p->invite_peer = NULL;
if (p2p->sd_peer == dev) if (p2p->sd_peer == dev)