eal: fix strdup usages in internal config
authorAnatoly Burakov <anatoly.burakov@intel.com>
Thu, 10 Jan 2019 13:38:59 +0000 (13:38 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 14 Jan 2019 14:05:19 +0000 (15:05 +0100)
commit66d9f61de0885bd07662a016542600fe139d4eed
tree9cca392bb1f4a6b86246327ff95cd2fb4b8ffe1c
parentb73cec26cd928bea52a2b746739ff251a7d0a732
eal: fix strdup usages in internal config

Currently, we use strdup in a few places to store command-line
parameter values for certain internal config values. There are
several issues with that.

First of all, they're never freed, so memory ends up leaking
either after EAL exit, or when these command-line options are
supplied multiple times.

Second of all, they're defined as `const char *`, so they
*cannot* be freed even if we wanted to.

Finally, strdup may return NULL, which will be stored in the
config. For most fields, NULL is a valid value, but for the
default prefix, the value is always expected to be valid.

To fix all of this, three things are done. First, we change
the definitions of these values to `char *` as opposed to
`const char *`. This does not break the ABI, and previous
code assumes constness (which is more restrictive), so it's
safe to do so.

Then, fix all usages of strdup to check return value, and add
a cleanup function that will free the memory occupied by
these strings, as well as freeing them before assigning a new
value to prevent leaks when parameter is specified multiple
times.

And finally, add an internal API to query hugefile prefix, so
that, absent of a valid value, a default value will be
returned, and also fix up all usages of hugefile prefix to
use this API instead of accessing hugefile prefix directly.

Bugzilla ID: 108

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/common/eal_common_options.c
lib/librte_eal/common/eal_filesystem.h
lib/librte_eal/common/eal_internal_cfg.h
lib/librte_eal/common/eal_options.h
lib/librte_eal/linuxapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal_memory.c