Add a warning to the bfd library for when it encounters an ELF file with an invalid...
authorNick Clifton <nickc@redhat.com>
Tue, 18 Sep 2018 15:54:07 +0000 (16:54 +0100)
committerNick Clifton <nickc@redhat.com>
Tue, 18 Sep 2018 15:54:07 +0000 (16:54 +0100)
PR 23657
* elfcode.h (elf_swap_shdr_in): Generate a warning message if an
ELF section has contents and size larger than the file size.

bfd/ChangeLog
bfd/elfcode.h

index 70de004..04c0c2a 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-18  Nick Clifton  <nickc@redhat.com>
+
+       PR 23657
+       * elfcode.h (elf_swap_shdr_in): Generate a warning message if an
+       ELF section has contents and size larger than the file size.
+
 2018-09-14  Maciej W. Rozycki  <macro@mips.com>
 
        PR ld/21375
index fb02e25..f224c8b 100644 (file)
@@ -314,6 +314,14 @@ elf_swap_shdr_in (bfd *abfd,
     dst->sh_addr = H_GET_WORD (abfd, src->sh_addr);
   dst->sh_offset = H_GET_WORD (abfd, src->sh_offset);
   dst->sh_size = H_GET_WORD (abfd, src->sh_size);
+  /* PR 23657.  Check for invalid section size, in sections with contents.
+     Note - we do not set an error value here because the contents
+     of this particular section might not be needed by the consumer.  */
+  if (dst->sh_type != SHT_NOBITS
+      && dst->sh_size > bfd_get_file_size (abfd))
+    _bfd_error_handler
+      (_("warning: %pB has a corrupt section with a size (%" BFD_VMA_FMT "x) larger than the file size"),
+       abfd, dst->sh_size);
   dst->sh_link = H_GET_32 (abfd, src->sh_link);
   dst->sh_info = H_GET_32 (abfd, src->sh_info);
   dst->sh_addralign = H_GET_WORD (abfd, src->sh_addralign);