[29/31] net/cnxk: check returned value for null

Message ID 20230811085805.441256-29-ndabilpuram@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series [01/31] common/cnxk: add aura ref count mechanism |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Nithin Dabilpuram Aug. 11, 2023, 8:58 a.m. UTC
  From: Akhil Goyal <gakhil@marvell.com>

nix_mtr_find may return NULL in case mtr is not found.
Hence checking the return value before using it.

Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
 drivers/net/cnxk/cnxk_ethdev_mtr.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
  

Patch

diff --git a/drivers/net/cnxk/cnxk_ethdev_mtr.c b/drivers/net/cnxk/cnxk_ethdev_mtr.c
index 27a6e4ef3d..edeca6dcc3 100644
--- a/drivers/net/cnxk/cnxk_ethdev_mtr.c
+++ b/drivers/net/cnxk/cnxk_ethdev_mtr.c
@@ -613,6 +613,11 @@  cnxk_nix_mtr_destroy(struct rte_eth_dev *eth_dev, uint32_t mtr_id,
 		while ((mtr->prev_cnt) + 1) {
 			mid_mtr =
 				nix_mtr_find(dev, mtr->prev_id[mtr->prev_cnt]);
+			if (mid_mtr == NULL) {
+				return -rte_mtr_error_set(error, ENOENT,
+					  RTE_MTR_ERROR_TYPE_MTR_ID, &mtr->prev_id[mtr->prev_cnt],
+					  "Mid meter id is invalid.");
+			}
 			rc = roc_nix_bpf_connect(nix, ROC_NIX_BPF_LEVEL_F_LEAF,
 						 mid_mtr->bpf_id,
 						 ROC_NIX_BPF_ID_INVALID);
@@ -628,6 +633,11 @@  cnxk_nix_mtr_destroy(struct rte_eth_dev *eth_dev, uint32_t mtr_id,
 		while (mtr->prev_cnt) {
 			top_mtr =
 				nix_mtr_find(dev, mtr->prev_id[mtr->prev_cnt]);
+			if (top_mtr == NULL) {
+				return -rte_mtr_error_set(error, ENOENT,
+					  RTE_MTR_ERROR_TYPE_MTR_ID, &mtr->prev_id[mtr->prev_cnt],
+					  "Top meter id is invalid.");
+			}
 			rc = roc_nix_bpf_connect(nix, ROC_NIX_BPF_LEVEL_F_MID,
 						 top_mtr->bpf_id,
 						 ROC_NIX_BPF_ID_INVALID);
@@ -1590,6 +1600,8 @@  nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id,
 		switch (*tree_level) {
 		case 0:
 			mtr = nix_get_mtr(eth_dev, cur_mtr_id);
+			if (mtr == NULL)
+				return -EINVAL;
 			if (mtr->level == ROC_NIX_BPF_LEVEL_IDX_INVALID) {
 				nix_mtr_level_update(eth_dev, cur_mtr_id, 0);
 				nix_mtr_chain_update(eth_dev, cur_mtr_id, -1,
@@ -1605,6 +1617,8 @@  nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id,
 			break;
 		case 1:
 			mtr = nix_get_mtr(eth_dev, cur_mtr_id);
+			if (mtr == NULL)
+				return -EINVAL;
 			if (mtr->level == ROC_NIX_BPF_LEVEL_IDX_INVALID) {
 				nix_mtr_level_update(eth_dev, cur_mtr_id, 1);
 				prev_mtr_id = id;
@@ -1635,6 +1649,8 @@  nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id,
 		switch (*tree_level) {
 		case 0:
 			mtr = nix_get_mtr(eth_dev, cur_mtr_id);
+			if (mtr == NULL)
+				return -EINVAL;
 			if (mtr->level == ROC_NIX_BPF_LEVEL_IDX_INVALID) {
 				nix_mtr_level_update(eth_dev, cur_mtr_id, 0);
 			} else {
@@ -1646,6 +1662,8 @@  nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id,
 			break;
 		case 1:
 			mtr = nix_get_mtr(eth_dev, cur_mtr_id);
+			if (mtr == NULL)
+				return -EINVAL;
 			if (mtr->level == ROC_NIX_BPF_LEVEL_IDX_INVALID) {
 				nix_mtr_level_update(eth_dev, cur_mtr_id, 1);
 				prev_mtr_id = id;
@@ -1666,6 +1684,8 @@  nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id,
 			break;
 		case 2:
 			mtr = nix_get_mtr(eth_dev, cur_mtr_id);
+			if (mtr == NULL)
+				return -EINVAL;
 			if (mtr->level == ROC_NIX_BPF_LEVEL_IDX_INVALID) {
 				nix_mtr_level_update(eth_dev, cur_mtr_id, 2);
 				prev_mtr_id = *prev_id;