mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-29 02:38:22 -05:00
P2P: Modify the timeout for GO Negotiation on no concurrent session
Peer should handle a GO Negotiation exchange correctly when the
responding device does not have WSC credentials available at the
time of receiving the GO Negotiation Request. WSC Credentials
(e.g., Pushbutton) can be entered within the 120 second timeout.
Presently, if concurrent session is not active, the peer would wait for
GO Negotiation Request frame from the other device for approximately one
minute due to the earlier optimization change in commit
a2d6365760
. To meet the two minute
requirement, replace this design based on number of iterations with a
more appropriate wait for the required number of seconds.
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
7e68be38e4
commit
388444e8d6
@ -3238,14 +3238,15 @@ static void p2p_timeout_wait_peer_connect(struct p2p_data *p2p)
|
|||||||
static void p2p_timeout_wait_peer_idle(struct p2p_data *p2p)
|
static void p2p_timeout_wait_peer_idle(struct p2p_data *p2p)
|
||||||
{
|
{
|
||||||
struct p2p_device *dev = p2p->go_neg_peer;
|
struct p2p_device *dev = p2p->go_neg_peer;
|
||||||
|
struct os_reltime now;
|
||||||
|
|
||||||
if (dev == NULL) {
|
if (dev == NULL) {
|
||||||
p2p_dbg(p2p, "Unknown GO Neg peer - stop GO Neg wait");
|
p2p_dbg(p2p, "Unknown GO Neg peer - stop GO Neg wait");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->wait_count++;
|
os_get_reltime(&now);
|
||||||
if (dev->wait_count >= 120) {
|
if (os_reltime_expired(&now, &dev->go_neg_wait_started, 120)) {
|
||||||
p2p_dbg(p2p, "Timeout on waiting peer to become ready for GO Negotiation");
|
p2p_dbg(p2p, "Timeout on waiting peer to become ready for GO Negotiation");
|
||||||
p2p_go_neg_failed(p2p, dev, -1);
|
p2p_go_neg_failed(p2p, dev, -1);
|
||||||
return;
|
return;
|
||||||
@ -3534,7 +3535,6 @@ int p2p_get_peer_info_txt(const struct p2p_peer_info *info,
|
|||||||
"req_config_methods=0x%x\n"
|
"req_config_methods=0x%x\n"
|
||||||
"flags=%s%s%s%s%s%s%s%s%s%s%s%s%s\n"
|
"flags=%s%s%s%s%s%s%s%s%s%s%s%s%s\n"
|
||||||
"status=%d\n"
|
"status=%d\n"
|
||||||
"wait_count=%u\n"
|
|
||||||
"invitation_reqs=%u\n",
|
"invitation_reqs=%u\n",
|
||||||
(int) (now.sec - dev->last_seen.sec),
|
(int) (now.sec - dev->last_seen.sec),
|
||||||
dev->listen_freq,
|
dev->listen_freq,
|
||||||
@ -3576,7 +3576,6 @@ int p2p_get_peer_info_txt(const struct p2p_peer_info *info,
|
|||||||
dev->flags & P2P_DEV_PD_FOR_JOIN ?
|
dev->flags & P2P_DEV_PD_FOR_JOIN ?
|
||||||
"[PD_FOR_JOIN]" : "",
|
"[PD_FOR_JOIN]" : "",
|
||||||
dev->status,
|
dev->status,
|
||||||
dev->wait_count,
|
|
||||||
dev->invitation_reqs);
|
dev->invitation_reqs);
|
||||||
if (res < 0 || res >= end - pos)
|
if (res < 0 || res >= end - pos)
|
||||||
return pos - buf;
|
return pos - buf;
|
||||||
|
@ -939,7 +939,7 @@ void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa,
|
|||||||
if (*msg.status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE) {
|
if (*msg.status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE) {
|
||||||
p2p_dbg(p2p, "Wait for the peer to become ready for GO Negotiation");
|
p2p_dbg(p2p, "Wait for the peer to become ready for GO Negotiation");
|
||||||
dev->flags |= P2P_DEV_NOT_YET_READY;
|
dev->flags |= P2P_DEV_NOT_YET_READY;
|
||||||
dev->wait_count = 0;
|
os_get_reltime(&dev->go_neg_wait_started);
|
||||||
p2p_set_state(p2p, P2P_WAIT_PEER_IDLE);
|
p2p_set_state(p2p, P2P_WAIT_PEER_IDLE);
|
||||||
p2p_set_timeout(p2p, 0, 0);
|
p2p_set_timeout(p2p, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -101,6 +101,7 @@ struct p2p_device {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
|
||||||
int status; /* enum p2p_status_code */
|
int status; /* enum p2p_status_code */
|
||||||
|
struct os_reltime go_neg_wait_started;
|
||||||
unsigned int wait_count;
|
unsigned int wait_count;
|
||||||
unsigned int connect_reqs;
|
unsigned int connect_reqs;
|
||||||
unsigned int invitation_reqs;
|
unsigned int invitation_reqs;
|
||||||
|
Loading…
Reference in New Issue
Block a user