_bfd_elf_slurp_version_tables tidy
authorAlan Modra <amodra@gmail.com>
Wed, 19 Nov 2014 08:40:49 +0000 (19:10 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 26 Nov 2014 02:59:29 +0000 (13:29 +1030)
commit601a03ba3d521989584a1f8abd5678040e0218cf
treeef07ef784834e0b3cd7ca9e5879f23e54c0eb405
parenta3e60ddb0b43a3aed32f2982d472ab305c7e8f67
_bfd_elf_slurp_version_tables tidy

The internal verref buffer is allocated with bfd_zalloc, based on a
count given in headers.  If the headers are broken/fuzzed and contain
an enormous count the alloc can result in OOM.  If we first read the
external verrefs (into a buffer that isn't zeroed on allocation) then
the read provides a sanity check on the headers.

Also prints an error for version info that fails other sanity checks.

* elf.c (_bfd_elf_slurp_version_tables): Delay allocation of
internal verref buffer.  Error for zero sh_info.  Print errors.
Check for zero vd_ndx.  Use bfd_zalloc for vd_auxptr buffer.
bfd/ChangeLog
bfd/elf.c