From: H.J. Lu Date: Mon, 29 Aug 2016 15:49:20 +0000 (-0700) Subject: Check the external compression header size X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f53be9779bb1220f33a8a45615e0fafd7b6f47c4;p=binutils-gdb.git 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. --- 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);