]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Indicate GO Negotiation failure on peer expiration
authorJithu Jance <jithu@broadcom.com>
Fri, 18 Nov 2011 21:13:03 +0000 (23:13 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 18 Nov 2011 21:13:03 +0000 (23:13 +0200)
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>
src/p2p/p2p.c

index e7505478301016a4e4f3092e7e2c73338c2a5417..8280c240006024123fc5d1bce927274f256761c0 100644 (file)
@@ -627,8 +627,13 @@ static void p2p_device_free(struct p2p_data *p2p, struct p2p_device *dev)
 {
        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;
+       }
        if (p2p->invite_peer == dev)
                p2p->invite_peer = NULL;
        if (p2p->sd_peer == dev)