diff options
author | Alan Modra <amodra@gmail.com> | 2017-09-24 14:34:57 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-09-24 14:34:57 +0930 |
commit | bd61e135492ecf624880e6b78e5fcde3c9716df6 (patch) | |
tree | e7207bc367264cf123f5aabffd4d8b6c63f14556 /bfd/elf.c | |
parent | 8d296e2d4d8ed6ffbe29bb8cc6548a3871de6ad1 (diff) | |
download | binutils-bd61e135492ecf624880e6b78e5fcde3c9716df6.zip binutils-bd61e135492ecf624880e6b78e5fcde3c9716df6.tar.gz binutils-bd61e135492ecf624880e6b78e5fcde3c9716df6.tar.bz2 |
PR22166, SHT_GNU_verneed memory allocation
The sanity check covers the previous minimim size, plus that the size
is at least enough for sh_info verneed entries.
Also, since we write all verneed fields or exit with an error, there
isn't any need to zero the memory allocated for verneed entries.
PR 22166
* elf.c (_bfd_elf_slurp_version_tables): Test sh_info on
SHT_GNU_verneed section for sanity. Don't zalloc memory for
verref.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -8198,7 +8198,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver) hdr = &elf_tdata (abfd)->dynverref_hdr; - if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verneed)) + if (hdr->sh_info == 0 + || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed)) { error_return_bad_verref: _bfd_error_handler @@ -8219,7 +8220,7 @@ error_return_verref: goto error_return_verref; elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) - bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed)); + bfd_alloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed)); if (elf_tdata (abfd)->verref == NULL) goto error_return_verref; |