This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[committed, PATCH] Warn unsupported compress type and corrupted compressed section
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Fri, 10 Jul 2015 10:25:02 -0700
- Subject: [committed, PATCH] Warn unsupported compress type and corrupted compressed section
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
* readelf.c (dump_section_as_strings): Warn unsupported compress
type and corrupted compressed section.
(dump_section_as_bytes): Likewise.
(load_specific_debug_section): Likewise.
---
binutils/ChangeLog | 7 +++++++
binutils/readelf.c | 51 ++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 45 insertions(+), 13 deletions(-)
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 53b69ca..09b0e1c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (dump_section_as_strings): Warn unsupported compress
+ type and corrupted compressed section.
+ (dump_section_as_bytes): Likewise.
+ (load_specific_debug_section): Likewise.
+
2015-07-09 Catherine Moore <clm@codesourcery.com>
* readelf.c (print_mips_fp_abi_value): Handle
diff --git a/binutils/readelf.c b/binutils/readelf.c
index ceedf3d..55faf83 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -12030,13 +12030,21 @@ dump_section_as_strings (Elf_Internal_Shdr * section, FILE * file)
unsigned int compression_header_size
= get_compression_header (& chdr, (unsigned char *) start);
- if (chdr.ch_type == ELFCOMPRESS_ZLIB
- && chdr.ch_addralign == section->sh_addralign)
+ if (chdr.ch_type != ELFCOMPRESS_ZLIB)
{
- uncompressed_size = chdr.ch_size;
- start += compression_header_size;
- new_size -= compression_header_size;
+ warn (_("section '%s' has unsupported compress type: %d\n"),
+ printable_section_name (section), chdr.ch_type);
+ return;
+ }
+ else if (chdr.ch_addralign != section->sh_addralign)
+ {
+ warn (_("compressed section '%s' is corrupted\n"),
+ printable_section_name (section));
+ return;
}
+ uncompressed_size = chdr.ch_size;
+ start += compression_header_size;
+ new_size -= compression_header_size;
}
else if (new_size > 12 && streq ((char *) start, "ZLIB"))
{
@@ -12156,13 +12164,21 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
unsigned int compression_header_size
= get_compression_header (& chdr, start);
- if (chdr.ch_type == ELFCOMPRESS_ZLIB
- && chdr.ch_addralign == section->sh_addralign)
+ if (chdr.ch_type != ELFCOMPRESS_ZLIB)
{
- uncompressed_size = chdr.ch_size;
- start += compression_header_size;
- new_size -= compression_header_size;
+ warn (_("section '%s' has unsupported compress type: %d\n"),
+ printable_section_name (section), chdr.ch_type);
+ return;
}
+ else if (chdr.ch_addralign != section->sh_addralign)
+ {
+ warn (_("compressed section '%s' is corrupted\n"),
+ printable_section_name (section));
+ return;
+ }
+ uncompressed_size = chdr.ch_size;
+ start += compression_header_size;
+ new_size -= compression_header_size;
}
else if (new_size > 12 && streq ((char *) start, "ZLIB"))
{
@@ -12290,9 +12306,18 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
Elf_Internal_Chdr chdr;
unsigned int compression_header_size
= get_compression_header (&chdr, start);
- if (chdr.ch_type != ELFCOMPRESS_ZLIB
- || chdr.ch_addralign != sec->sh_addralign)
- return 0;
+ if (chdr.ch_type != ELFCOMPRESS_ZLIB)
+ {
+ warn (_("section '%s' has unsupported compress type: %d\n"),
+ section->name, chdr.ch_type);
+ return 0;
+ }
+ else if (chdr.ch_addralign != sec->sh_addralign)
+ {
+ warn (_("compressed section '%s' is corrupted\n"),
+ section->name);
+ return 0;
+ }
uncompressed_size = chdr.ch_size;
start += compression_header_size;
size -= compression_header_size;
--
2.4.3