From: Thomas Preud'homme Date: Wed, 6 Apr 2016 08:26:42 +0000 (+0100) Subject: Fix memory leak in ld ARM backend X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=15dd01b1209ec92b361dd2547708dd17ffc2a786;p=binutils-gdb.git Fix memory leak in ld ARM backend 2016-04-06 Thomas Preud'homme bfd/ * elf32-arm.c (elf32_arm_size_stubs): Move error_ret_free_local to be a fall through from error_ret_free_internal. Free local_syms in error_ret_free_local if allocated from bfd_elf_get_elf_syms (). --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4fd4b4c1314..ef4254f60b6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2016-04-06 Thomas Preud'homme + + * elf32-arm.c (elf32_arm_size_stubs): Move error_ret_free_local to be + a fall through from error_ret_free_internal. Free local_syms in + error_ret_free_local if allocated from bfd_elf_get_elf_syms (). + 2016-04-05 Cupertino Miranda * elf32-arc.c (plt_do_relocs_for_symbol): Changed. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 81ebf67a3af..1d506f69fdd 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -5294,7 +5294,13 @@ elf32_arm_size_stubs (bfd *output_bfd, error_ret_free_internal: if (elf_section_data (section)->relocs == NULL) free (internal_relocs); - goto error_ret_free_local; + /* Fall through. */ + error_ret_free_local: + if (local_syms != NULL + && (symtab_hdr->contents + != (unsigned char *) local_syms)) + free (local_syms); + return FALSE; } hash = NULL; @@ -5700,9 +5706,6 @@ elf32_arm_size_stubs (bfd *output_bfd, htab->num_a8_erratum_fixes = 0; } return TRUE; - - error_ret_free_local: - return FALSE; } /* Build all the stubs associated with the current output file. The