From 8e5e2f86c4f5fb3b67365a24af578faa30f34081 Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Thu, 8 Mar 2018 12:55:46 +0530 Subject: [PATCH] qcacmn: Fix for the rx_desc leak In dp_rx_get_free_desc_list() corrected the return value in case when the number of requested rx_desc are not available in the pool Change-Id: I3de026726e885b8fe707f7c7318cc1936be73e65 CRs-Fixed: 2202247 --- dp/wifi3.0/dp_rx_desc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/dp/wifi3.0/dp_rx_desc.c b/dp/wifi3.0/dp_rx_desc.c index 074bf646a07b..5d3444c92d4e 100644 --- a/dp/wifi3.0/dp_rx_desc.c +++ b/dp/wifi3.0/dp_rx_desc.c @@ -115,21 +115,16 @@ uint16_t dp_rx_get_free_desc_list(struct dp_soc *soc, uint32_t pool_id, qdf_spin_lock_bh(&soc->rx_desc_mutex[pool_id]); - *desc_list = rx_desc_pool->freelist; - - if (!(*desc_list)) { - qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]); - return 0; - } + *desc_list = *tail = rx_desc_pool->freelist; for (count = 0; count < num_descs; count++) { - *tail = rx_desc_pool->freelist; - rx_desc_pool->freelist = rx_desc_pool->freelist->next; if (qdf_unlikely(!rx_desc_pool->freelist)) { qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]); return count; } + *tail = rx_desc_pool->freelist; + rx_desc_pool->freelist = rx_desc_pool->freelist->next; } (*tail)->next = NULL; qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);