From 6fa2b7de3e647e64c5d693aea7f3bacbfa964f53 Mon Sep 17 00:00:00 2001 From: Ihor Solodari Date: Wed, 20 Aug 2025 09:00:03 +0100 Subject: [PATCH] btf_encoder: Fix elf_functions cleanup on error When elf_functions__new() errors out and jumps to elf_functions__delete(), pahole segfaults on attempt to list_del() the elf_functions instance from a list, to which it was never added. Fix this by moving list_del() call out of elf_functions__delete(). Remove from the list only on normal cleanup in elf_functions_list__clear(). v1: https://lore.kernel.org/dwarves/979a1ac4-21d3-4384-8ce4-d10f41887088@linux.dev/ Closes: https://lore.kernel.org/dwarves/24bcc853-533c-42ab-bc37-0c13e0baa217@windriver.com/ Reported-by: Changqing Li Signed-off-by: Ihor Solodrai Reviewed-by: Arnaldo Carvalho de Melo Link: https://lore.kernel.org/dwarves/acef4a0e-7d3b-4e05-b3ca-1007580f2754@linux.dev/ Signed-off-by: Alan Maguire Upstream-Status: Backport [https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?h=next&id=fe6738f4b46b63dcdc5b15b252a014b3eaba16a4] Signed-off-by: Changqing Li --- btf_encoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/btf_encoder.c b/btf_encoder.c index 511c1ea..2f8c6bb 100644 --- a/btf_encoder.c +++ b/btf_encoder.c @@ -162,7 +162,6 @@ static inline void elf_functions__delete(struct elf_functions *funcs) free(funcs->entries[i].alias); free(funcs->entries); elf_symtab__delete(funcs->symtab); - list_del(&funcs->node); free(funcs); } @@ -204,6 +203,7 @@ static inline void elf_functions_list__clear(struct list_head *elf_functions_lis list_for_each_safe(pos, tmp, elf_functions_list) { funcs = list_entry(pos, struct elf_functions, node); + list_del(&funcs->node); elf_functions__delete(funcs); } } -- 2.34.1