aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2017-11-28 18:00:29 +0000
committerNick Clifton <nickc@redhat.com>2017-11-28 18:00:29 +0000
commitb0029dce6867de1a2828293177b0e030d2f0f03c (patch)
tree43baafd2475e603a017335e492241866e4c48775 /bfd
parentff174d3ffad13af17a61583db3e1cd9c0c6cf237 (diff)
downloadgdb-b0029dce6867de1a2828293177b0e030d2f0f03c.zip
gdb-b0029dce6867de1a2828293177b0e030d2f0f03c.tar.gz
gdb-b0029dce6867de1a2828293177b0e030d2f0f03c.tar.bz2
Prevent a memory exhaustion problem when trying to read in strings from a COFF binary with a corrupt string table size.
PR 22507 * coffgen.c (_bfd_coff_read_string_table): Check for an excessive size of the external string table.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/coffgen.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 13ff8ad..e8d7563 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
2017-11-28 Nick Clifton <nickc@redhat.com>
+ PR 22507
+ * coffgen.c (_bfd_coff_read_string_table): Check for an excessive
+ size of the external string table.
+
+2017-11-28 Nick Clifton <nickc@redhat.com>
+
PR 22506
* reloc.c (reloc_offset_in_range): Rename to
bfd_reloc_offset_in_range and export.
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 81efd9b..7798dfc 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -1718,7 +1718,7 @@ _bfd_coff_read_string_table (bfd *abfd)
#endif
}
- if (strsize < STRING_SIZE_SIZE)
+ if (strsize < STRING_SIZE_SIZE || strsize > bfd_get_file_size (abfd))
{
_bfd_error_handler
/* xgettext: c-format */
@@ -1726,7 +1726,7 @@ _bfd_coff_read_string_table (bfd *abfd)
bfd_set_error (bfd_error_bad_value);
return NULL;
}
-
+
strings = (char *) bfd_malloc (strsize + 1);
if (strings == NULL)
return NULL;