bnxt_parse_dev_args() placed the "err" label immediately after the last
"goto err", in the middle of the fall-through path, so the jump skipped
nothing. The seven handlers that follow it ran even when an earlier
argument had already failed to parse, and their return values were
discarded, so a bad value in any of them was ignored entirely.
Move the label to just before the kvargs list is freed and check every
handler, so that parsing stops at the first bad argument.
Fixes: 29ce7059e8e7 ("net/bnxt: check kvargs parsing")
Cc: [email protected]
Signed-off-by: Stephen Hemminger <[email protected]>
---
drivers/net/bnxt/bnxt_ethdev.c | 42 ++++++++++++++++++++++------------
1 file changed, 27 insertions(+), 15 deletions(-)
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 4903f6fb10..816d466354 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -6353,57 +6353,69 @@ bnxt_parse_dev_args(struct bnxt *bp, struct rte_devargs
*devargs)
if (ret)
goto err;
-err:
/*
* Handler for "mpc" devarg.
* Invoked as for ex: "-a 000:00:0d.0,mpc=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_MPC,
- bnxt_parse_devarg_mpc, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_MPC,
+ bnxt_parse_devarg_mpc, bp);
+ if (ret)
+ goto err;
/*
* Handler for "app-id" devarg.
* Invoked as for ex: "-a 000:00:0d.0,app-id=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_APP_ID,
- bnxt_parse_devarg_app_id, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_APP_ID,
+ bnxt_parse_devarg_app_id, bp);
+ if (ret)
+ goto err;
/*
* Handler for "ieee-1588" devarg.
* Invoked as for ex: "-a 000:00:0d.0,ieee-1588=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_IEEE_1588,
- bnxt_parse_devarg_ieee_1588, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_IEEE_1588,
+ bnxt_parse_devarg_ieee_1588, bp);
+ if (ret)
+ goto err;
/*
* Handler for "cqe-mode" devarg.
* Invoked as for ex: "-a 000:00:0d.0,cqe-mode=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_CQE_MODE,
- bnxt_parse_devarg_cqe_mode, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_CQE_MODE,
+ bnxt_parse_devarg_cqe_mode, bp);
+ if (ret)
+ goto err;
/*
* Handler for "representor" devarg.
* Invoked as for ex: "-a 000:00:0d.0,representor=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_REPRESENTOR,
- bnxt_parse_devarg_representor_mode, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_REPRESENTOR,
+ bnxt_parse_devarg_representor_mode, bp);
+ if (ret)
+ goto err;
/*
* Handler for "scalar-mode" devarg.
* Invoked as for ex: "-a 000:00:0d.0,scalar-mode=1"
*/
- rte_kvargs_process(kvlist, BNXT_DEVARG_SCALAR_MODE,
- bnxt_parse_devarg_scalar_mode, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARG_SCALAR_MODE,
+ bnxt_parse_devarg_scalar_mode, bp);
+ if (ret)
+ goto err;
/*
* Handler for "app-instance-id" devarg.
* Invoked as for ex: "-a 000:00:0d.0,app-instance-id=1"
* This argument is required for enabling truflow hot upgrade feature.
*/
- rte_kvargs_process(kvlist, BNXT_DEVARD_APP_INST_ID,
- bnxt_parse_devarg_app_instance_id, bp);
+ ret = rte_kvargs_process(kvlist, BNXT_DEVARD_APP_INST_ID,
+ bnxt_parse_devarg_app_instance_id, bp);
+err:
rte_kvargs_free(kvlist);
return ret;
}
--
2.53.0