diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 671883b7c7..1ec0b19f5c 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -12120,8 +12120,10 @@ uint16_t dp_get_peer_mac_list(ol_txrx_soc_handle soc, uint8_t vdev_id, if (!vdev) return new_mac_cnt; - if (limit && (vdev->num_peers > mac_cnt)) + if (limit && (vdev->num_peers > mac_cnt)) { + dp_vdev_unref_delete(dp_soc, vdev, DP_MOD_ID_CDP); return 0; + } qdf_spin_lock_bh(&vdev->peer_list_lock); TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) { diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index aa71b24056..c3c297e2a3 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -3476,8 +3476,13 @@ dp_clear_peer(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, peer = dp_peer_find_hash_find(soc, peer_addr.bytes, 0, DP_VDEV_ALL, DP_MOD_ID_CDP); - if (!peer || !peer->valid) + + if (!peer) return QDF_STATUS_E_FAULT; + if (!peer->valid) { + dp_peer_unref_delete(peer, DP_MOD_ID_CDP); + return QDF_STATUS_E_FAULT; + } dp_clear_peer_internal(soc, peer); dp_peer_unref_delete(peer, DP_MOD_ID_CDP); diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index 82d0ffb627..e24e062242 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -472,8 +472,10 @@ static QDF_STATUS dp_vdev_set_monitor_mode(struct cdp_soc_t *dp_soc, pdev = vdev->pdev; - if (!pdev || !pdev->monitor_pdev) + if (!pdev || !pdev->monitor_pdev) { + dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP); return QDF_STATUS_E_FAILURE; + } mon_pdev = pdev->monitor_pdev;