From 42ddb11440b461400ff502cdbe87d4d658953758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Laigre?= Date: Mon, 14 Sep 2026 10:48:28 +0200 Subject: [PATCH 1/2] Fix memory leak with regcomp usage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sébastien Laigre --- drivers/net/cnxk/cnxk_rep.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/cnxk/cnxk_rep.h b/drivers/net/cnxk/cnxk_rep.h index 9ede1e6dadd..5204c94633e 100644 --- a/drivers/net/cnxk/cnxk_rep.h +++ b/drivers/net/cnxk/cnxk_rep.h @@ -106,8 +106,12 @@ cnxk_ethdev_is_representor(const char *if_name) regex_t regex; int val; - val = regcomp(®ex, "net_.*_representor_.*", 0); + if (regcomp(®ex, "net_.*_representor_.*", 0) != 0) + return 0; + val = regexec(®ex, if_name, 0, NULL, 0); + regfree(®ex); + return (val == 0); } From c0dce066fa781afd909b2545fdb103457bfad874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Laigre?= Date: Mon, 14 Sep 2026 11:05:21 +0200 Subject: [PATCH 2/2] Fix log cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sébastien Laigre --- lib/eal/freebsd/eal.c | 1 + lib/eal/windows/eal.c | 1 + lib/log/log.c | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c index 8b1ba5b99ba..d7a0e48423a 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -795,6 +795,7 @@ rte_eal_cleanup(void) rte_eal_memory_detach(); eal_cleanup_config(internal_conf); eal_lcore_var_cleanup(); + rte_eal_log_cleanup(); return 0; } diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c index 6dacae72353..7b091ea9ae3 100644 --- a/lib/eal/windows/eal.c +++ b/lib/eal/windows/eal.c @@ -149,6 +149,7 @@ rte_eal_cleanup(void) rte_eal_memory_detach(); eal_cleanup_config(internal_conf); eal_lcore_var_cleanup(); + rte_eal_log_cleanup(); return 0; } diff --git a/lib/log/log.c b/lib/log/log.c index 8ad5250a137..32ba8531873 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -234,6 +234,21 @@ log_save_level(uint32_t priority, const char *regex, const char *pattern) return -1; } +static void +log_free_saved_levels(void) +{ + struct rte_eal_opt_loglevel *opt_ll; + + while ((opt_ll = TAILQ_FIRST(&opt_loglevel_list)) != NULL) { + TAILQ_REMOVE(&opt_loglevel_list, opt_ll, next); + if (opt_ll->pattern != NULL) + free(opt_ll->pattern); + else + regfree(&opt_ll->re_match); + free(opt_ll); + } +} + RTE_EXPORT_INTERNAL_SYMBOL(eal_log_save_regexp) int eal_log_save_regexp(const char *regex, uint32_t level) @@ -578,6 +593,8 @@ RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_log_cleanup) void rte_eal_log_cleanup(void) { + log_free_saved_levels(); + if (rte_logs.is_internal_file && rte_logs.file != NULL) fclose(rte_logs.file); rte_logs.file = NULL;