* [patch] Fix PowerPC targets minor memory leaks found by Coverity
@ 2014-01-24 13:38 Jan Kratochvil
2014-01-27 0:12 ` Alan Modra
0 siblings, 1 reply; 3+ messages in thread
From: Jan Kratochvil @ 2014-01-24 13:38 UTC (permalink / raw)
To: Binutils
Hi,
I find reasons of each of the patch chunk obvious but I did not test the patch
in any way.
Regards,
Jan
bfd/
2014-01-24 Jan Kratochvil <jan.kratochvil@redhat.com>
* coff-rs6000.c (xcoff_write_archive_contents_big): Free OFFSETS in
return paths. Three times.
* elf32-ppc.c (ppc_elf_relax_section): Free FIXUPS in error_return
return path.
* elf64-ppc.c (ppc64_elf_link_hash_table_create): Free HTAB in all
return paths.
(ppc64_elf_tls_optimize): Free TOC_REF in return path.
(ppc64_elf_edit_toc): Free USED in return path.
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 1170c7f..2b5f952 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -2404,7 +2404,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
PRINT20 (ahdrp->nextoff, iterator.next.offset);
if (!do_pad (abfd, iterator.current.leading_padding))
- return FALSE;
+ {
+ free (offsets);
+ return FALSE;
+ }
BFD_ASSERT (iterator.current.offset == bfd_tell (abfd));
namlen = iterator.current.padded_namlen;
@@ -2414,7 +2417,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
|| bfd_seek (iterator.current.member, 0, SEEK_SET) != 0
|| !do_copy (abfd, iterator.current.member)
|| !do_pad (abfd, iterator.current.trailing_padding))
- return FALSE;
+ {
+ free (offsets);
+ return FALSE;
+ }
offsets[i] = iterator.current.offset;
prevoff = iterator.current.offset;
@@ -2459,7 +2465,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
member_table_size += member_table_size & 1;
member_table = bfd_zmalloc (member_table_size);
if (member_table == NULL)
- return FALSE;
+ {
+ free (offsets);
+ return FALSE;
+ }
hdr = (struct xcoff_ar_hdr_big *) member_table;
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 61c45d8..fe4f37b 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -7134,6 +7134,13 @@ ppc_elf_relax_section (bfd *abfd,
return TRUE;
error_return:
+ do
+ {
+ struct one_fixup *f = fixups;
+ fixups = fixups->next;
+ free (f);
+ }
+ while (fixups);
if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
free (isymbuf);
if (contents != NULL
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index c97a39e..9be8bfc 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -4168,19 +4168,31 @@ ppc64_elf_link_hash_table_create (bfd *abfd)
/* Init the stub hash table too. */
if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
sizeof (struct ppc_stub_hash_entry)))
- return NULL;
+ {
+ _bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
+ return NULL;
+ }
/* And the branch hash table. */
if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
sizeof (struct ppc_branch_hash_entry)))
- return NULL;
+ {
+ bfd_hash_table_free (&htab->stub_hash_table);
+ _bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
+ return NULL;
+ }
htab->tocsave_htab = htab_try_create (1024,
tocsave_htab_hash,
tocsave_htab_eq,
NULL);
if (htab->tocsave_htab == NULL)
- return NULL;
+ {
+ bfd_hash_table_free (&htab->branch_hash_table);
+ bfd_hash_table_free (&htab->stub_hash_table);
+ _bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
+ return NULL;
+ }
/* Initializing two fields of the union is just cosmetic. We really
only care about glist, but when compiled on a 32-bit host the
@@ -8073,7 +8085,10 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
info->keep_memory);
if (relstart == NULL)
- return FALSE;
+ {
+ free (toc_ref);
+ return FALSE;
+ }
relend = relstart + sec->reloc_count;
for (rel = relstart; rel < relend; rel++)
@@ -8781,7 +8796,10 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
info->keep_memory);
if (relstart == NULL)
- goto error_ret;
+ {
+ free (used);
+ goto error_ret;
+ }
/* Mark toc entries referenced as used. */
do
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch] Fix PowerPC targets minor memory leaks found by Coverity
2014-01-24 13:38 [patch] Fix PowerPC targets minor memory leaks found by Coverity Jan Kratochvil
@ 2014-01-27 0:12 ` Alan Modra
2014-02-04 19:19 ` [commit] " Jan Kratochvil
0 siblings, 1 reply; 3+ messages in thread
From: Alan Modra @ 2014-01-27 0:12 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: Binutils
On Fri, Jan 24, 2014 at 02:38:31PM +0100, Jan Kratochvil wrote:
> * coff-rs6000.c (xcoff_write_archive_contents_big): Free OFFSETS in
> return paths. Three times.
This is OK.
> * elf32-ppc.c (ppc_elf_relax_section): Free FIXUPS in error_return
> return path.
This is not OK. There are paths to error_return before fixups have
been allocated and after fixups have been freed. Please change the
error_return free of fixups from a do { } while (); to a while () { }
loop. OK with that change.
> * elf64-ppc.c (ppc64_elf_link_hash_table_create): Free HTAB in all
> return paths.
> (ppc64_elf_tls_optimize): Free TOC_REF in return path.
> (ppc64_elf_edit_toc): Free USED in return path.
These are OK.
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] 3+ messages in thread
* [commit] [patch] Fix PowerPC targets minor memory leaks found by Coverity
2014-01-27 0:12 ` Alan Modra
@ 2014-02-04 19:19 ` Jan Kratochvil
0 siblings, 0 replies; 3+ messages in thread
From: Jan Kratochvil @ 2014-02-04 19:19 UTC (permalink / raw)
To: Binutils
On Mon, 27 Jan 2014 01:12:15 +0100, Alan Modra wrote:
> On Fri, Jan 24, 2014 at 02:38:31PM +0100, Jan Kratochvil wrote:
> > * elf32-ppc.c (ppc_elf_relax_section): Free FIXUPS in error_return
> > return path.
>
> This is not OK. There are paths to error_return before fixups have
> been allocated and after fixups have been freed. Please change the
> error_return free of fixups from a do { } while (); to a while () { }
> loop. OK with that change.
I see you have checked it in in the meantime as a part of:
commit 5446cbdf82892a800ed7eef563a795e75223ec52
Author: Alan Modra <amodra@gmail.com>
Date: Thu Jan 30 08:26:02 2014 +1030
ppc476 icache bug workaround
Checked in the other two parts as:
2915c55b41d00f12ed6bc54b4160e3367065c1c8
Thanks,
Jan
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-02-04 19:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-24 13:38 [patch] Fix PowerPC targets minor memory leaks found by Coverity Jan Kratochvil
2014-01-27 0:12 ` Alan Modra
2014-02-04 19:19 ` [commit] " Jan Kratochvil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).