From f53be9779bb1220f33a8a45615e0fafd7b6f47c4 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 29 Aug 2016 08:49:20 -0700 Subject: [PATCH] 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. --- binutils/ChangeLog | 11 ++++++++--- binutils/readelf.c | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index e709a2d4279..5ab28f8079b 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2016-08-29 H.J. Lu + + * readelf.c (load_specific_debug_section): Check the external + compression header size. + 2016-08-19 Nick Clifton * 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 adbee937caa..a99c521c123 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); -- 2.30.2