Skip to content

Commit 2bbaf4d

Browse files
author
johnjiang
authored
Merge pull request #1098 from Frodocz/hotfix/fix-dpdk-argv-double-free
Give EAL a scratch copy of the pointer array to avoid double free
2 parents 813b820 + d0ddc6a commit 2bbaf4d

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

‎lib/ff_dpdk_if.c‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2070,7 +2070,15 @@ ff_dpdk_init(int argc, char **argv)
20702070
exit(1);
20712071
}
20722072

2073-
int ret = rte_eal_init(argc, argv);
2073+
/* rte_eal_init() permutes argv and overwrites argv[optind - 1] with argv[0],
2074+
* so two slots would alias one string and ff_unload_config(), which frees
2075+
* every dpdk_argv[] entry, would free it twice. Give EAL a scratch copy. */
2076+
char *eal_argv[DPDK_CONFIG_NUM + 1] = {NULL};
2077+
if (argc > DPDK_CONFIG_NUM) {
2078+
rte_exit(EXIT_FAILURE, "too many EAL arguments: %d\n", argc);
2079+
}
2080+
memcpy(eal_argv, argv, sizeof(char *) * argc);
2081+
int ret = rte_eal_init(argc, eal_argv);
20742082
if (ret < 0) {
20752083
rte_exit(EXIT_FAILURE, "Error with EAL initialization\n");
20762084
}

0 commit comments

Comments
 (0)