forked from Imagelibrary/binutils-gdb
More fixes for memory access errors triggered by attemps to examine corrupted binaries.
PR binutils/17512 * dwarf.c (display_block): Do nothing if the block starts after the end of the buffer. (read_and_display_attr_value): Add range checks. (struct Frame_Chunk): Make the ncols and ra fields unsigned. (frame_need_space): Test for an ncols of zero. (read_cie): Fail if the augmentation data extends off the end of the buffer. (display_debug_frames): Add checks for read_cie failing. Add range checks. * coff-h8300.c (rtype2howto): Replace abort with returning a NULL value. * coff-h8500.c (rtype2howto): Likewise. * coff-tic30.c (rtype2howto): Likewise. * coff-z80.c (rtype2howto): Likewise. * coff-z8k.c (rtype2howto): Likewise. * coff-ia64.c (RTYPE2HOWTO): Always return a valid howto. * coff-m68k.c (m68k_rtype2howto): Return a NULL howto if none could be found. * coff-mcore.c (RTYPE2HOWTO): Add range checking. * coff-w65.c (rtype2howto): Likewise. * coff-we32k.c (RTYPE2HOWTO): Likewise. * pe-mips.c (RTYPE2HOWTO): Likewise. * coff-x86_64.c (coff_amd64_reloc): Likewise. Replace abort with an error return. * coffcode.h (coff_slurp_reloc_table): Allow the rel parameter to be unused. * coffgen.c (make_a_section_from_file): Check the length of a section name before testing to see if it is a debug section name. (coff_object_p): Zero out any uninitialised bytes in the opt header. * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Test for the raw source being empty when there are values to be processed. (_bfd_ecoff_slurp_symbol_table): Add range check. * mach-o.c (bfd_mach_o_canonicalize_one_reloc): Likewise. (bfd_mach_o_mangle_sections): Move test for too many sections to before the allocation of the section table. (bfd_mach_o_read_symtab_strtab): If the read fails, free the memory and nullify the symbol pointer. * reloc.c (bfd_generic_get_relocated_section_contents): Add handling of a bfd_reloc_notsupported return value. * versados.c (EDATA): Add range checking. (get_record): Likewise. (process_otr): Check for contents being available before updating them. (versados_canonicalize_reloc): Add range check.
This commit is contained in:
@@ -146,8 +146,9 @@ make_a_section_from_file (bfd *abfd,
|
||||
/* Compress/decompress DWARF debug sections with names: .debug_* and
|
||||
.zdebug_*, after the section flags is set. */
|
||||
if ((flags & SEC_DEBUGGING)
|
||||
&& strlen (name) > 7
|
||||
&& ((name[1] == 'd' && name[6] == '_')
|
||||
|| (name[1] == 'z' && name[7] == '_')))
|
||||
|| (strlen (name) > 8 && name[1] == 'z' && name[7] == '_')))
|
||||
{
|
||||
enum { nothing, compress, decompress } action = nothing;
|
||||
char *new_name = NULL;
|
||||
@@ -365,6 +366,10 @@ coff_object_p (bfd *abfd)
|
||||
bfd_release (abfd, opthdr);
|
||||
return NULL;
|
||||
}
|
||||
/* PR 17512: file: 11056-1136-0.004. */
|
||||
if (internal_f.f_opthdr < aoutsz)
|
||||
memset (((char *) opthdr) + internal_f.f_opthdr, 0, aoutsz - internal_f.f_opthdr);
|
||||
|
||||
bfd_coff_swap_aouthdr_in (abfd, opthdr, (void *) &internal_a);
|
||||
bfd_release (abfd, opthdr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user