From: Artem Savkov Date: Tue, 20 Nov 2018 17:52:15 +0000 (-0600) Subject: objtool: Fix double-free in .cold detection error path X-Git-Tag: v4.19.10~79 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=79cd7b0e114dbb3f7520bcc069c32db80c0a67e8;p=platform%2Fkernel%2Flinux-rpi.git objtool: Fix double-free in .cold detection error path [ Upstream commit 0b9301fb632f7111a3293a30cc5b20f1b82ed08d ] If read_symbols() fails during second list traversal (the one dealing with ".cold" subfunctions) it frees the symbol, but never deletes it from the list/hash_table resulting in symbol being freed again in elf_close(). Fix it by just returning an error, leaving cleanup to elf_close(). Signed-off-by: Artem Savkov Signed-off-by: Josh Poimboeuf Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Fixes: 13810435b9a7 ("objtool: Support GCC 8's cold subfunctions") Link: http://lkml.kernel.org/r/beac5a9b7da9e8be90223459dcbe07766ae437dd.1542736240.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar Signed-off-by: Sasha Levin --- diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c index 7ec85d5..a6f543e 100644 --- a/tools/objtool/elf.c +++ b/tools/objtool/elf.c @@ -312,7 +312,7 @@ static int read_symbols(struct elf *elf) if (!pfunc) { WARN("%s(): can't find parent function", sym->name); - goto err; + return -1; } sym->pfunc = pfunc;