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

Nithin Dabilpuram ndabilpuram at marvell.com
Fri Aug 11 10:58:03 CEST 2023


From: Akhil Goyal <gakhil at 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 at marvell.com>
---
 drivers/net/cnxk/cnxk_ethdev_mtr.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

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;
-- 
2.25.1



More information about the dev mailing list