From: Akhil Goyal <gak...@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 <gak...@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

Reply via email to