From d0ddc6aba13185231fbe0507051d3877b44efcd3 Mon Sep 17 00:00:00 2001 From: Zhang Chao Date: Mon, 26 Oct 2026 07:50:47 +0000 Subject: [PATCH] Give EAL a scratch copy of the pointer array, so dpdk_argv keeps the pointers ff_unload_config() owns --- lib/ff_dpdk_if.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/ff_dpdk_if.c b/lib/ff_dpdk_if.c index f1dc0ac65..c6c43b6e3 100644 --- a/lib/ff_dpdk_if.c +++ b/lib/ff_dpdk_if.c @@ -2070,7 +2070,15 @@ ff_dpdk_init(int argc, char **argv) exit(1); } - int ret = rte_eal_init(argc, argv); + /* rte_eal_init() permutes argv and overwrites argv[optind - 1] with argv[0], + * so two slots would alias one string and ff_unload_config(), which frees + * every dpdk_argv[] entry, would free it twice. Give EAL a scratch copy. */ + char *eal_argv[DPDK_CONFIG_NUM + 1] = {NULL}; + if (argc > DPDK_CONFIG_NUM) { + rte_exit(EXIT_FAILURE, "too many EAL arguments: %d\n", argc); + } + memcpy(eal_argv, argv, sizeof(char *) * argc); + int ret = rte_eal_init(argc, eal_argv); if (ret < 0) { rte_exit(EXIT_FAILURE, "Error with EAL initialization\n"); }