The rte_kvargs_process() was used to parse KV pairs, it also supports
to parse 'only keys' (e.g. socket_id) type. And the callback function
parameter 'value' is NULL when parsed 'only keys'.
This patch fixes segment fault when parse input args with 'only keys'.
Fixes: 79f2248219c0 ("net/i40e: add floating VEB option")
Fixes: cfdfca493cae ("net/i40e: fix multiple driver support")
Fixes: 56270b4208ab ("net/i40e: limit the number of VF messages")
Fixes: ee653bd80044 ("net/i40e: determine number of queues per VF at run time")
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
drivers/net/i40e/i40e_ethdev.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
@@ -829,6 +829,9 @@ floating_veb_list_handler(__rte_unused const char *key,
int min, max;
bool *vf_floating_veb = opaque;
+ if (floating_veb_value == NULL)
+ return -EINVAL;
+
while (isblank(*floating_veb_value))
floating_veb_value++;
@@ -921,6 +924,9 @@ i40e_check_floating_handler(__rte_unused const char *key,
const char *value,
__rte_unused void *opaque)
{
+ if (value == NULL)
+ return -EINVAL;
+
if (strcmp(value, "1"))
return -1;
@@ -1258,6 +1264,9 @@ i40e_parse_multi_drv_handler(__rte_unused const char *key,
pf = (struct i40e_pf *)opaque;
+ if (value == NULL)
+ return -EINVAL;
+
errno = 0;
support_multi_driver = strtoul(value, &end, 10);
if (errno != 0 || end == value || *end != 0) {
@@ -1347,6 +1356,9 @@ read_vf_msg_config(__rte_unused const char *key,
{
struct i40e_vf_msg_cfg *cfg = opaque;
+ if (value == NULL)
+ return -EINVAL;
+
if (sscanf(value, "%u@%u:%u", &cfg->max_msg, &cfg->period,
&cfg->ignore_second) != 3) {
memset(cfg, 0, sizeof(*cfg));
@@ -4693,6 +4705,9 @@ static int i40e_pf_parse_vf_queue_number_handler(const char *key,
pf = (struct i40e_pf *)opaque;
RTE_SET_USED(key);
+ if (value == NULL)
+ return -EINVAL;
+
errno = 0;
num = strtoul(value, &end, 0);
if (errno != 0 || end == value || *end != 0) {