qcacld-3.0: Fix NULL pointer dereferencing issues
Fix below issues:
1) check cds_get_context results before use
2) remove function calls from ASSERTs
3) make sure variables are initialized before use
4) check pointers for NULL before dereferencing
Change-Id: Iac92e6f2d1030a7dd12469e34341135bea7c781f
CRs-Fixed: 1047286
(cherry picked from commit a2547fd35fc517abfbc96363768b5d036d59d057)
diff --git a/core/dp/txrx/ol_txrx_flow_control.c b/core/dp/txrx/ol_txrx_flow_control.c
index ab4af41..f654a97 100644
--- a/core/dp/txrx/ol_txrx_flow_control.c
+++ b/core/dp/txrx/ol_txrx_flow_control.c
@@ -157,6 +157,11 @@
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "Global Pool");
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "ERROR: pdev NULL");
+ QDF_ASSERT(0); /* traceback */
+ return;
+ }
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "Total %d :: Available %d",
pdev->tx_desc.pool_size, pdev->tx_desc.num_free);
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "Invalid flow_pool %d",
@@ -413,6 +418,13 @@
if (!pool) {
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
"%s: pool is NULL\n", __func__);
+ QDF_ASSERT(0);
+ return -ENOMEM;
+ }
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: pdev is NULL\n", __func__);
+ QDF_ASSERT(0);
return -ENOMEM;
}
@@ -512,6 +524,12 @@
struct ol_tx_flow_pool_t *pool = NULL;
bool is_found = false;
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "ERROR: pdev NULL");
+ QDF_ASSERT(0); /* traceback */
+ return NULL;
+ }
+
qdf_spin_lock_bh(&pdev->tx_desc.flow_pool_list_lock);
TAILQ_FOREACH(pool, &pdev->tx_desc.flow_pool_list,
flow_pool_list_elem) {
@@ -529,7 +547,6 @@
pool = NULL;
return pool;
-
}