From: Rashmi Ramanna Date: Mon, 17 Nov 2014 10:37:24 +0000 (+0530) Subject: P2P: Do not change P2P state on GO Neg failure if it is P2P_SEARCH X-Git-Tag: hostap_2_4~1102 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9d11832090d6c8cc2f5d1586354d8c6b2e082703;p=thirdparty%2Fhostap.git P2P: Do not change P2P state on GO Neg failure if it is P2P_SEARCH Changing the P2P state to P2P_IDLE on GO Negotiation Failure would stop the previously issued P2P_FIND operation without notifying the upper layers. Leave the search operation running if in P2P_SEARCH state to avoid unexpected behavior in case the upper layers issued a new P2P_FIND while waiting for GO Negotiation to complete. Signed-off-by: Jouni Malinen --- diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c index d17f70d5a..14f453a85 100644 --- a/src/p2p/p2p.c +++ b/src/p2p/p2p.c @@ -219,9 +219,15 @@ void p2p_go_neg_failed(struct p2p_data *p2p, int status) if (!peer) return; - p2p_clear_timeout(p2p); eloop_cancel_timeout(p2p_go_neg_wait_timeout, p2p, NULL); - p2p_set_state(p2p, P2P_IDLE); + if (p2p->state != P2P_SEARCH) { + /* + * Clear timeouts related to GO Negotiation if no new p2p_find + * has been started. + */ + p2p_clear_timeout(p2p); + p2p_set_state(p2p, P2P_IDLE); + } peer->flags &= ~P2P_DEV_PEER_WAITING_RESPONSE; peer->wps_method = WPS_NOT_READY;