aboutsummaryrefslogtreecommitdiff
path: root/bfd/ChangeLog
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-05-19 12:58:59 +0930
committerAlan Modra <amodra@gmail.com>2020-05-20 11:43:50 +0930
commit7b958a48e1322880f23cdb0a1c35643dd27d3ddb (patch)
treef22ca3f8b85ab4a5d371c465a899700a4989209f /bfd/ChangeLog
parent84f800117f075b78932d3abdc0a09421bb9d2657 (diff)
downloadgdb-7b958a48e1322880f23cdb0a1c35643dd27d3ddb.zip
gdb-7b958a48e1322880f23cdb0a1c35643dd27d3ddb.tar.gz
gdb-7b958a48e1322880f23cdb0a1c35643dd27d3ddb.tar.bz2
PR25993, read of freed memory
ldmain.c:add_archive_element copies file name pointers from the bfd to a lang_input_statement_type. input->filename = abfd->filename; input->local_sym_name = abfd->filename; This results in stale pointers when twiddling the bfd filename in places like the pe ld after_open. So don't free the bfd filename, and make copies using bfd_alloc memory that won't result in small memory leaks that annoy memory checkers. PR 25993 bfd/ * archive.c (_bfd_get_elt_at_filepos): Don't strdup filename, use bfd_set_filename. * elfcode.h (_bfd_elf_bfd_from_remote_memory): Likewise. * mach-o.c (bfd_mach_o_fat_member_init): Likewise. * opncls.c (bfd_fopen, bfd_openstreamr, bfd_openr_iovec, bfd_openw), (bfd_create): Likewise. (_bfd_delete_bfd): Don't free filename. (bfd_set_filename): Copy filename param to bfd_alloc'd memory, return pointer to the copy or NULL on alloc fail. * vms-lib.c (_bfd_vms_lib_get_module): Free newname and test result of bfd_set_filename. * bfd-in2.h: Regenerate. gdb/ * solib-darwin.c (darwin_bfd_open): Don't strdup pathname for bfd_set_filename. * solib-aix.c (solib_aix_bfd_open): Use std::string for name passed to bfd_set_filename. * symfile-mem.c (add_vsyscall_page): Likewise for string passed to symbol_file_add_from_memory. (symbol_file_add_from_memory): Make name param a const char* and don't strdup. ld/ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Don't copy other_bfd_filename for bfd_set_filename, and test result of bfd_set_filename call. Don't create a new is->filename, simply copy from bfd filename. Free new_name after bfd_set_filename. * emultempl/pep.em (gld_${EMULATION_NAME}_after_open): Likewise.
Diffstat (limited to 'bfd/ChangeLog')
-rw-r--r--bfd/ChangeLog16
1 files changed, 16 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6d3673d..eb6191c 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,21 @@
2020-05-20 Alan Modra <amodra@gmail.com>
+ PR 25993
+ * archive.c (_bfd_get_elt_at_filepos): Don't strdup filename,
+ use bfd_set_filename.
+ * elfcode.h (_bfd_elf_bfd_from_remote_memory): Likewise.
+ * mach-o.c (bfd_mach_o_fat_member_init): Likewise.
+ * opncls.c (bfd_fopen, bfd_openstreamr, bfd_openr_iovec, bfd_openw),
+ (bfd_create): Likewise.
+ (_bfd_delete_bfd): Don't free filename.
+ (bfd_set_filename): Copy filename param to bfd_alloc'd memory,
+ return pointer to the copy or NULL on alloc fail.
+ * vms-lib.c (_bfd_vms_lib_get_module): Free newname and test
+ result of bfd_set_filename.
+ * bfd-in2.h: Regenerate.
+
+2020-05-20 Alan Modra <amodra@gmail.com>
+
PR 26011
* elf.c (_bfd_elf_get_reloc_upper_bound): Sanity check reloc
section size against file size.