diff options
author | Nick Clifton <nickc@redhat.com> | 2018-09-18 16:54:07 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-09-18 16:54:07 +0100 |
commit | 8ff71a9c80cfcf64c54d4ae938c644b1b1ea19fb (patch) | |
tree | 1faaa4477fe479f69c256382b9c20467978a442f /bfd/elfcode.h | |
parent | 3ff2c72e14b7f4381c785ee35608c2812ef8610e (diff) | |
download | fsf-binutils-gdb-8ff71a9c80cfcf64c54d4ae938c644b1b1ea19fb.zip fsf-binutils-gdb-8ff71a9c80cfcf64c54d4ae938c644b1b1ea19fb.tar.gz fsf-binutils-gdb-8ff71a9c80cfcf64c54d4ae938c644b1b1ea19fb.tar.bz2 |
Add a warning to the bfd library for when it encounters an ELF file with an invalid section size.
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.
Diffstat (limited to 'bfd/elfcode.h')
-rw-r--r-- | bfd/elfcode.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/bfd/elfcode.h b/bfd/elfcode.h index fb02e25..f224c8b 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -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); |