The rte_eal_init function looks at argv[0] to determine the program name to pass to the log init function. But in corner cases argv[0] maybe NULL leading to a SEGV.
The code here is just using argv[0] to generate logid which does not have to be in a static string, openlog() will handle a const char pointer. Simple workaround for argv[0] being NULL is to pass NULL to openlog() and let it handle it. Both glibc, and musl handle this case. Signed-off-by: Stephen Hemminger <sthem...@microsoft.com> --- v3 - redo to make this limited to just the null argv[0] bug lib/eal/linux/eal.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c index 9c8395ab14d0..c0ff325c4ce9 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -966,8 +966,7 @@ rte_eal_init(int argc, char **argv) pthread_t thread_id; static uint32_t run_once; uint32_t has_run = 0; - const char *p; - static char logid[PATH_MAX]; + const char *logid = NULL; char cpuset[RTE_CPU_AFFINITY_STR_LEN]; char thread_name[RTE_MAX_THREAD_NAME_LEN]; bool phys_addrs; @@ -989,8 +988,12 @@ rte_eal_init(int argc, char **argv) return -1; } - p = strrchr(argv[0], '/'); - strlcpy(logid, p ? p + 1 : argv[0], sizeof(logid)); + if (argv && argv[0]) { + const char *p = strrchr(argv[0], '/'); + + logid = p ? p + 1 : argv[0]; + } + thread_id = pthread_self(); eal_reset_internal_config(internal_conf); -- 2.34.1