Check return value of rte_kvargs_process()

Coverity issue: 357765

Fixes: ba404aacc5cf ("net/bnxt: set maximum flow count")
Fixes: 02a95625fe9c ("net/bnxt: add flow stats in extended stats")
Fixes: 7b0940653720 ("net/bnxt: support host memory based TruFlow")

Cc: sta...@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khapa...@broadcom.com>
Reviewed-by: Lance Richardson <lance.richard...@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 1990d65c29..930e7e83f4 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -5477,40 +5477,49 @@ bnxt_parse_devarg_rep_fc_f2r(__rte_unused const char 
*key,
        return 0;
 }
 
-static void
+static int
 bnxt_parse_dev_args(struct bnxt *bp, struct rte_devargs *devargs)
 {
        struct rte_kvargs *kvlist;
+       int ret;
 
        if (devargs == NULL)
-               return;
+               return 0;
 
        kvlist = rte_kvargs_parse(devargs->args, bnxt_dev_args);
        if (kvlist == NULL)
-               return;
+               return -EINVAL;
 
        /*
         * Handler for "truflow" devarg.
         * Invoked as for ex: "-a 0000:00:0d.0,host-based-truflow=1"
         */
-       rte_kvargs_process(kvlist, BNXT_DEVARG_TRUFLOW,
-                          bnxt_parse_devarg_truflow, bp);
+       ret = rte_kvargs_process(kvlist, BNXT_DEVARG_TRUFLOW,
+                                bnxt_parse_devarg_truflow, bp);
+       if (ret)
+               goto err;
 
        /*
         * Handler for "flow_xstat" devarg.
         * Invoked as for ex: "-a 0000:00:0d.0,flow_xstat=1"
         */
-       rte_kvargs_process(kvlist, BNXT_DEVARG_FLOW_XSTAT,
-                          bnxt_parse_devarg_flow_xstat, bp);
+       ret = rte_kvargs_process(kvlist, BNXT_DEVARG_FLOW_XSTAT,
+                                bnxt_parse_devarg_flow_xstat, bp);
+       if (ret)
+               goto err;
 
        /*
         * Handler for "max_num_kflows" devarg.
         * Invoked as for ex: "-a 000:00:0d.0,max_num_kflows=32"
         */
-       rte_kvargs_process(kvlist, BNXT_DEVARG_MAX_NUM_KFLOWS,
-                          bnxt_parse_devarg_max_num_kflows, bp);
+       ret = rte_kvargs_process(kvlist, BNXT_DEVARG_MAX_NUM_KFLOWS,
+                                bnxt_parse_devarg_max_num_kflows, bp);
+       if (ret)
+               goto err;
 
+err:
        rte_kvargs_free(kvlist);
+       return ret;
 }
 
 static int bnxt_alloc_switch_domain(struct bnxt *bp)
@@ -5645,7 +5654,9 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev, void *params 
__rte_unused)
        bp = eth_dev->data->dev_private;
 
        /* Parse dev arguments passed on when starting the DPDK application. */
-       bnxt_parse_dev_args(bp, pci_dev->device.devargs);
+       rc = bnxt_parse_dev_args(bp, pci_dev->device.devargs);
+       if (rc)
+               goto error_free;
 
        rc = bnxt_drv_init(eth_dev);
        if (rc)
-- 
2.21.1 (Apple Git-122.3)

Reply via email to