]> git.ipfire.org Git - thirdparty/hostap.git/commit
P2P: Fix listen state machine getting stuck in send_action() scheduled case
authorHu Wang <huw@codeaurora.org>
Wed, 13 Nov 2019 04:54:55 +0000 (12:54 +0800)
committerJouni Malinen <j@w1.fi>
Wed, 13 Nov 2019 21:59:37 +0000 (23:59 +0200)
commitf3c077929f0d978f58af073ec94fd5ebbceb55c4
tree500f11cbd733a401aadd9931d9a07e9210ade329
parent530b8ee3c8e5795d5c356796055ec9699934d05e
P2P: Fix listen state machine getting stuck in send_action() scheduled case

Commit 947b5a1532f9 ("P2P: Stop listen state if Action frame TX is
needed on another channel") added an optimization for P2P response
transmission in certain concurrent operation cases. However, it did not
take into account possibility of the driver not being in listen
state (p2p->drv_in_listen == 0) and could end up getting stuck with the
P2P state machine in a manner that made the device not listen for
following messages. This showed up in following manner in the debug log:

P2P: Starting short listen state (state=SEARCH)
P2P: Driver ended Listen state (freq=2437)
process received frame and send a response
P2P: Stop listen on 0 MHz to allow a frame to be sent immediately on 2437 MHz
P2P: Clear timeout (state=SEARCH)
--> state machine stuck

Fix this by adding drv_in_listen > 0 condition for the optimization to
stop the listen operation in send_action() resulting in scheduled TX.

Fixes: 947b5a1532f9 ("P2P: Stop listen state if Action frame TX is needed on another channel")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/p2p/p2p.c