summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2021-03-15 11:00:44 +0100
committerJan Beulich <jbeulich@suse.com>2021-03-15 11:00:44 +0100
commitc68b1842bdb3cedce0cac7da43045c3788085a91 (patch)
tree9f9e316d7621c53ca03359f1d53baca52f6d634e
parentba6a0ef34933712ec65855997e982bead3b314d4 (diff)
downloadbinutils-gdb-c68b1842bdb3cedce0cac7da43045c3788085a91.tar.gz
ld: don't chance overrunning PE .reloc section content
The allocation of reloc_d doesn't take reloc_s->size into account. There is already padding being emitted up to the allocated size. While reloc_s->size ought to still be zero at this point anyway (and hence the code being deleted would have been just dead), don't risk writing past the actual allocation.
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/pe-dll.c3
2 files changed, 4 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index fe68e6ded9b..01b93c52cb9 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-15 Jan Beulich <jbeulich@suse.com>
+
+ * pe-dll.c (generate_reloc): Drop padding to reloc_s->size.
+
2021-03-12 Alan Modra <amodra@gmail.com>
* Makefile.am (ALL_EMULATION_SOURCES): Move riscv files to..
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index afcf6fea93e..eaecb951efd 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1752,9 +1752,6 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
if (page_ptr != (bfd_vma) -1)
bfd_put_32 (abfd, reloc_sz - page_ptr, reloc_d + page_ptr + 4);
-
- while (reloc_sz < reloc_s->size)
- reloc_d[reloc_sz++] = 0;
}
/* Given the exiting def_file structure, print out a .DEF file that