summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremie Courreges-Anglas <jca@cvs.openbsd.org>2019-03-01 16:46:12 +0000
committerJeremie Courreges-Anglas <jca@cvs.openbsd.org>2019-03-01 16:46:12 +0000
commitadf8987b882040452954d4ce564c08b60087b37a (patch)
tree8f918e673041a34ed55115a12184db86d2e71dfb
parent51b117799e9ea8f0dc09fc07892f02b56c9e4fe6 (diff)
Fix a crash: don't assume that all input files are ELF objects
ld(1) would try to free uninitialized memory when used with -r -b binary <fontfile> by ports/textproc/mupdf. Perform the same bfd type check as bfd_elf_match_symbols_in_sections(). Fix found the hard way, cheese and wine sponsor: miod. Almost identical fix already present upstream. Also set the freed pointer to NULL, just in case. ok tb@ sthen@
-rw-r--r--gnu/usr.bin/binutils-2.17/bfd/elflink.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gnu/usr.bin/binutils-2.17/bfd/elflink.c b/gnu/usr.bin/binutils-2.17/bfd/elflink.c
index f1a67caeeaa..d6fe664949f 100644
--- a/gnu/usr.bin/binutils-2.17/bfd/elflink.c
+++ b/gnu/usr.bin/binutils-2.17/bfd/elflink.c
@@ -8619,8 +8619,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
if (!info->reduce_memory_overheads)
{
for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
- if (elf_tdata (sub)->symbuf)
- free (elf_tdata (sub)->symbuf);
+ {
+ if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
+ {
+ free (elf_tdata (sub)->symbuf);
+ elf_tdata (sub)->symbuf = NULL;
+ }
+ }
}
/* Output any global symbols that got converted to local in a