net/softnic: fix null dereference in arguments parsing
authorDapeng Yu <dapengx.yu@intel.com>
Tue, 27 Jul 2021 08:14:59 +0000 (16:14 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 30 Jul 2021 11:32:15 +0000 (13:32 +0200)
When there is no "firmware" in arguments, the "firmware" pointer is
null, and will be dereferenced by rte_strscpy().

This patch moves the code block which copies character string from
"firmware" to "p->firmware" into the "if" statements where "firmware"
argument exists and it is duplicated successfully.

Coverity issue: 372136
Fixes: d8f852f5f369 ("net/softnic: fix memory leak in arguments parsing")
Cc: stable@dpdk.org
Signed-off-by: Dapeng Yu <dapengx.yu@intel.com>
Acked-by: Jasvinder Singh <jasvinder.singh@intel.com>
drivers/net/softnic/rte_eth_softnic.c

index 0aa7147..b3b55b9 100644 (file)
@@ -479,17 +479,19 @@ pmd_parse_args(struct pmd_params *p, const char *params)
                        &get_string, &firmware);
                if (ret < 0)
                        goto out_free;
-       }
-       if (rte_strscpy(p->firmware, firmware,
-                       sizeof(p->firmware)) < 0) {
-               PMD_LOG(WARNING,
-                       "\"%s\": firmware path should be shorter than %zu",
-                       firmware, sizeof(p->firmware));
+
+               if (rte_strscpy(p->firmware, firmware,
+                               sizeof(p->firmware)) < 0) {
+                       PMD_LOG(WARNING,
+                               "\"%s\": "
+                               "firmware path should be shorter than %zu",
+                               firmware, sizeof(p->firmware));
+                       free(firmware);
+                       ret = -EINVAL;
+                       goto out_free;
+               }
                free(firmware);
-               ret = -EINVAL;
-               goto out_free;
        }
-       free(firmware);
        /* Connection listening port (optional) */
        if (rte_kvargs_count(kvlist, PMD_PARAM_CONN_PORT) == 1) {
                ret = rte_kvargs_process(kvlist, PMD_PARAM_CONN_PORT,