diff --git a/components/tdls/core/src/wlan_tdls_cmds_process.c b/components/tdls/core/src/wlan_tdls_cmds_process.c index e9d4613bcc02..09b92bee7899 100644 --- a/components/tdls/core/src/wlan_tdls_cmds_process.c +++ b/components/tdls/core/src/wlan_tdls_cmds_process.c @@ -490,8 +490,11 @@ static QDF_STATUS tdls_activate_add_peer(struct tdls_add_peer_request *req) TDLS_LINK_CONNECTING, TDLS_LINK_SUCCESS); status = tdls_pe_add_peer(req); - if (QDF_IS_STATUS_ERROR(status)) + if (QDF_IS_STATUS_ERROR(status)) { + tdls_err(QDF_MAC_ADDR_STR " add peer failed with status %d", + QDF_MAC_ADDR_ARRAY(mac), status); goto setlink; + } return QDF_STATUS_SUCCESS; @@ -950,8 +953,11 @@ tdls_activate_update_peer(struct tdls_update_peer_request *req) tdls_set_peer_caps(vdev_obj, mac, &req->update_peer_req); status = tdls_pe_update_peer(req); - if (QDF_IS_STATUS_ERROR(status)) + if (QDF_IS_STATUS_ERROR(status)) { + tdls_err(QDF_MAC_ADDR_STR " update peer failed with status %d", + QDF_MAC_ADDR_ARRAY(mac), status); goto setlink; + } return QDF_STATUS_SUCCESS; @@ -1182,6 +1188,13 @@ QDF_STATUS tdls_process_del_peer(struct tdls_oper_request *req) goto error; } + if (!peer->valid_entry) { + tdls_err("invalid peer:" QDF_MAC_ADDR_STR " link state %d", + QDF_MAC_ADDR_ARRAY(mac), peer->link_status); + status = QDF_STATUS_E_INVAL; + goto error; + } + if (soc_obj->tdls_dp_vdev_update) soc_obj->tdls_dp_vdev_update(&soc_obj->soc, wlan_vdev_get_id(vdev), diff --git a/components/tdls/core/src/wlan_tdls_ct.c b/components/tdls/core/src/wlan_tdls_ct.c index 48bcd6000397..0c8801041098 100644 --- a/components/tdls/core/src/wlan_tdls_ct.c +++ b/components/tdls/core/src/wlan_tdls_ct.c @@ -522,8 +522,12 @@ void tdls_indicate_teardown(struct tdls_vdev_priv_obj *tdls_vdev, return; } - if (TDLS_LINK_CONNECTED != curr_peer->link_status) + if (curr_peer->link_status != TDLS_LINK_CONNECTED) { + tdls_err("link state %d peer:" QDF_MAC_ADDR_STR, + curr_peer->link_status, + QDF_MAC_ADDR_ARRAY(curr_peer->peer_mac.bytes)); return; + } tdls_set_peer_link_status(curr_peer, TDLS_LINK_TEARING, diff --git a/components/tdls/core/src/wlan_tdls_peer.c b/components/tdls/core/src/wlan_tdls_peer.c index 7157a8832202..241924a0572c 100644 --- a/components/tdls/core/src/wlan_tdls_peer.c +++ b/components/tdls/core/src/wlan_tdls_peer.c @@ -613,6 +613,9 @@ void tdls_set_peer_link_status(struct tdls_peer *peer, struct tdls_soc_priv_obj *soc_obj; struct tdls_vdev_priv_obj *vdev_obj; + tdls_debug("state %d reason %d peer:" QDF_MAC_ADDR_STR, + link_status, link_reason, + QDF_MAC_ADDR_ARRAY(peer->peer_mac.bytes)); peer->link_status = link_status; if (link_status >= TDLS_LINK_DISCOVERED) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 179d2f32346a..4544d7e33dd9 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1737,6 +1737,9 @@ QDF_STATUS wma_peer_unmap_conf_cb(uint8_t vdev_id, uint32_t peer_id_cnt, uint16_t *peer_id_list); +bool wma_objmgr_peer_exist(tp_wma_handle wma, + uint8_t *peer_addr, uint8_t *peer_vdev_id); + /** * wma_get_cca_stats() - send request to fw to get CCA * @wmi_hdl: wma handle diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 7b0c33730663..9cb320350947 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1533,8 +1533,8 @@ QDF_STATUS wma_peer_unmap_conf_cb(uint8_t vdev_id, return qdf_status; } -static bool wma_objmgr_peer_exist(tp_wma_handle wma, uint8_t vdev_id, - uint8_t *peer_addr, uint8_t *peer_vdev_id) +bool wma_objmgr_peer_exist(tp_wma_handle wma, + uint8_t *peer_addr, uint8_t *peer_vdev_id) { struct wlan_objmgr_peer *peer; @@ -1587,7 +1587,7 @@ QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *mac_addr, return QDF_STATUS_E_INVAL; } - if (!wma_objmgr_peer_exist(wma, vdev_id, peer_addr, NULL)) { + if (!wma_objmgr_peer_exist(wma, peer_addr, NULL)) { wma_err("peer doesn't exist peer_addr %pM vdevid %d peer_count %d", peer_addr, vdev_id, wma->interfaces[vdev_id].peer_count); @@ -1737,7 +1737,7 @@ static struct wlan_objmgr_peer *wma_create_objmgr_peer(tp_wma_handle wma, * Check if peer with same MAC exist on any Vdev, If so avoid * adding this peer. */ - if (wma_objmgr_peer_exist(wma, vdev_id, peer_addr, &peer_vdev_id)) { + if (wma_objmgr_peer_exist(wma, peer_addr, &peer_vdev_id)) { wma_info("Peer %pM already exist on vdev %d, current vdev %d", peer_addr, peer_vdev_id, vdev_id); return NULL; diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 5dc974256557..159586e5393a 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -3812,6 +3812,15 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle, goto end_tdls_peer_state; } + + if (!wma_objmgr_peer_exist(wma_handle, + peer_state->peer_macaddr, NULL)) { + wma_err("peer:" QDF_MAC_ADDR_STR "doesn't exist", + QDF_MAC_ADDR_ARRAY(peer_state->peer_macaddr)); + ret = -EINVAL; + goto end_tdls_peer_state; + } + peer_cap = &peer_state->peer_cap; /* peer capability info is valid only when peer state is connected */