diff options
author | Tom Tromey <tromey@adacore.com> | 2024-08-21 09:09:26 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-08-21 10:33:46 -0600 |
commit | 5d683ae3dadd78fa88c243310404480555555246 (patch) | |
tree | 3ae456bbf1d7994a74ae3b95836e8974d0c140dd /gdb | |
parent | 28c3bf55f0f9aca8619c6d01be34a02a887c5577 (diff) | |
download | gdb-5d683ae3dadd78fa88c243310404480555555246.zip gdb-5d683ae3dadd78fa88c243310404480555555246.tar.gz gdb-5d683ae3dadd78fa88c243310404480555555246.tar.bz2 |
Do not assume ELF in dwarf2/read.c
dwarf2/read.c has this code:
else if (elf_section_data (sectp)->this_hdr.sh_size
> bfd_get_file_size (abfd))
This assumes that the BFD is an ELF, which is an invalid assumption.
A user noticed that this can sometimes cause a crash.
This patch fixes the problem by changing this code to use
bfd_section_size_insane.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32104
Reviewed-By: Tom de Vries <tdevries@suse.de>
Reviewed-by: Keith Seitz <keiths@redhat.com>
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/dwarf2/read.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index fde8eee..f9f34fd 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -1423,12 +1423,11 @@ dwarf2_per_bfd::locate_sections (bfd *abfd, asection *sectp, if ((aflag & SEC_HAS_CONTENTS) == 0) { } - else if (elf_section_data (sectp)->this_hdr.sh_size - > bfd_get_file_size (abfd)) + else if (bfd_section_size_insane (abfd, sectp)) { - bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size; - warning (_("Discarding section %s which has a section size (%s" - ") larger than the file size [in module %s]"), + bfd_size_type size = sectp->size; + warning (_("Discarding section %s which has an invalid size (%s) " + "[in module %s]"), bfd_section_name (sectp), phex_nz (size, sizeof (size)), bfd_get_filename (abfd)); } |