mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 14:49:24 +01:00
p2p: Free parsed frame data in p2p_go_negotiation_resp_cb
This commit is contained in:
parent
6bba989913
commit
d511b4b782
26
src/p2p.c
26
src/p2p.c
@ -1943,7 +1943,7 @@ static bool p2p_go_negotiation_resp_cb(const struct mmpdu_header *mpdu,
|
|||||||
if (resp_info.dialog_token != 1) {
|
if (resp_info.dialog_token != 1) {
|
||||||
l_error("GO Negotiation Response dialog token doesn't match");
|
l_error("GO Negotiation Response dialog token doesn't match");
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp_info.status != P2P_STATUS_SUCCESS) {
|
if (resp_info.status != P2P_STATUS_SUCCESS) {
|
||||||
@ -1956,12 +1956,12 @@ static bool p2p_go_negotiation_resp_cb(const struct mmpdu_header *mpdu,
|
|||||||
p2p_go_neg_req_timeout, dev,
|
p2p_go_neg_req_timeout, dev,
|
||||||
p2p_go_neg_req_timeout_destroy);
|
p2p_go_neg_req_timeout_destroy);
|
||||||
p2p_device_discovery_start(dev);
|
p2p_device_discovery_start(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
l_error("GO Negotiation Response status %i", resp_info.status);
|
l_error("GO Negotiation Response status %i", resp_info.status);
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1975,31 +1975,33 @@ static bool p2p_go_negotiation_resp_cb(const struct mmpdu_header *mpdu,
|
|||||||
if (resp_info.go_intent == 0) {
|
if (resp_info.go_intent == 0) {
|
||||||
/* Can't continue */
|
/* Can't continue */
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp_info.capability.group_caps & P2P_GROUP_CAP_PERSISTENT_GROUP) {
|
if (resp_info.capability.group_caps & P2P_GROUP_CAP_PERSISTENT_GROUP) {
|
||||||
l_error("Persistent groups not supported");
|
l_error("Persistent groups not supported");
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp_info.device_password_id != dev->conn_password_id) {
|
if (resp_info.device_password_id != dev->conn_password_id) {
|
||||||
l_error("GO Negotiation Response WSC device password ID wrong");
|
l_error("GO Negotiation Response WSC device password ID wrong");
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p2p_device_validate_channel_list(dev, &resp_info.channel_list,
|
if (!p2p_device_validate_channel_list(dev, &resp_info.channel_list,
|
||||||
&resp_info.operating_channel))
|
&resp_info.operating_channel)) {
|
||||||
return true;
|
p2p_connect_failed(dev);
|
||||||
|
goto p2p_free;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check whether WFD IE is required, validate it if present */
|
/* Check whether WFD IE is required, validate it if present */
|
||||||
if (!p2p_device_validate_conn_wfd(dev, resp_info.wfd,
|
if (!p2p_device_validate_conn_wfd(dev, resp_info.wfd,
|
||||||
resp_info.wfd_size)) {
|
resp_info.wfd_size)) {
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
band = scan_oper_class_to_band(
|
band = scan_oper_class_to_band(
|
||||||
@ -2037,11 +2039,10 @@ static bool p2p_go_negotiation_resp_cb(const struct mmpdu_header *mpdu,
|
|||||||
confirm_body = p2p_build_go_negotiation_confirmation(&confirm_info,
|
confirm_body = p2p_build_go_negotiation_confirmation(&confirm_info,
|
||||||
&confirm_len);
|
&confirm_len);
|
||||||
confirm_info.wfd = NULL;
|
confirm_info.wfd = NULL;
|
||||||
p2p_clear_go_negotiation_resp(&resp_info);
|
|
||||||
|
|
||||||
if (!confirm_body) {
|
if (!confirm_body) {
|
||||||
p2p_connect_failed(dev);
|
p2p_connect_failed(dev);
|
||||||
return true;
|
goto p2p_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
iov[iov_len].iov_base = confirm_body;
|
iov[iov_len].iov_base = confirm_body;
|
||||||
@ -2053,6 +2054,9 @@ static bool p2p_go_negotiation_resp_cb(const struct mmpdu_header *mpdu,
|
|||||||
p2p_peer_frame_xchg(dev->conn_peer, iov, dev->conn_peer->device_addr,
|
p2p_peer_frame_xchg(dev->conn_peer, iov, dev->conn_peer->device_addr,
|
||||||
0, 0, 0, false, FRAME_GROUP_CONNECT,
|
0, 0, 0, false, FRAME_GROUP_CONNECT,
|
||||||
p2p_go_negotiation_confirm_done, NULL);
|
p2p_go_negotiation_confirm_done, NULL);
|
||||||
|
|
||||||
|
p2p_free:
|
||||||
|
p2p_clear_go_negotiation_resp(&resp_info);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user