aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2016-08-29 08:49:20 -0700
committerH.J. Lu <hjl.tools@gmail.com>2016-08-29 08:49:20 -0700
commitf53be9779bb1220f33a8a45615e0fafd7b6f47c4 (patch)
tree820183249c1733f2cfed35cbf457f1fe4b7257b3
parent74437ea28fb611d4c88077b486fd7c0a8b4c2a25 (diff)
downloadgdb-f53be9779bb1220f33a8a45615e0fafd7b6f47c4.zip
gdb-f53be9779bb1220f33a8a45615e0fafd7b6f47c4.tar.gz
gdb-f53be9779bb1220f33a8a45615e0fafd7b6f47c4.tar.bz2
Check the external compression header size
Since the internal compression header size can be bigger than the external compression header size, we should check the external compression header size. * readelf.c (load_specific_debug_section): Check the external compression header size.
-rw-r--r--binutils/ChangeLog11
-rw-r--r--binutils/readelf.c4
2 files changed, 11 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index e709a2d..5ab28f8 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (load_specific_debug_section): Check the external
+ compression header size.
+
2016-08-19 Nick Clifton <nickc@redhat.com>
* testsuite/binutils-all/readelf.s: Adjust expected ordering of
@@ -17,9 +22,9 @@
off the end of the section when populating the directory table and
file table.
(frame_display_row): Set max_regs equal to ncols.
- (load_specific_debug_section): If the section is compressed, but
- it is not big enough to hold a compression header then warn and
- return 0.
+ * readelf.c (load_specific_debug_section): If the section is
+ compressed, but it is not big enough to hold a compression
+ header then warn and return 0.
PR binutils/20439
* dwarf.c (display_debug_lines_decoded): Check directory and file
diff --git a/binutils/readelf.c b/binutils/readelf.c
index adbee93..a99c521 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -12706,7 +12706,9 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
Elf_Internal_Chdr chdr;
unsigned int compression_header_size;
- if (size < sizeof chdr)
+ if (size < (is_32bit_elf
+ ? sizeof (Elf32_External_Chdr)
+ : sizeof (Elf64_External_Chdr)))
{
warn (_("compressed section %s is too small to contain a compression header"),
section->name);