eal: fix mempool ops name parsing
authorIvan Malov <ivan.malov@oktetlabs.ru>
Fri, 4 May 2018 10:31:54 +0000 (11:31 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 13 May 2018 23:32:07 +0000 (01:32 +0200)
The code aimed to pick and remember the value of
mempool ops name from EAL command line arguments does not
copy the string and remembers the pointer provided
by getopt_long() directly. The latter could be clobbered
later and result in reading wrong mbuf pool ops name
by rte_mempool library.

Typically, this flaw could be avoided by using strdup()
to remember the string value of the option.

Fixes: a103a97e7191 ("eal: allow user to override default mempool driver")
Cc: stable@dpdk.org
Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal.c

index a63f11f..3ba328a 100644 (file)
@@ -380,7 +380,8 @@ eal_parse_args(int argc, char **argv)
 
                switch (opt) {
                case OPT_MBUF_POOL_OPS_NAME_NUM:
-                       internal_config.user_mbuf_pool_ops_name = optarg;
+                       internal_config.user_mbuf_pool_ops_name =
+                           strdup(optarg);
                        break;
                case 'h':
                        eal_usage(prgname);
index e2c0bd6..34d9412 100644 (file)
@@ -593,7 +593,8 @@ eal_parse_args(int argc, char **argv)
                        break;
 
                case OPT_MBUF_POOL_OPS_NAME_NUM:
-                       internal_config.user_mbuf_pool_ops_name = optarg;
+                       internal_config.user_mbuf_pool_ops_name =
+                           strdup(optarg);
                        break;
 
                default: