From: Alan Modra Date: Sun, 24 Sep 2017 05:04:57 +0000 (+0930) Subject: PR22166, SHT_GNU_verneed memory allocation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bd61e135492ecf624880e6b78e5fcde3c9716df6;p=binutils-gdb.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9b4cb08d14e..af04da9e69e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2017-09-24 Alan Modra + + 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. + 2017-09-22 H.J. Lu PR binutils/22170 diff --git a/bfd/elf.c b/bfd/elf.c index 9b61f06a84c..38dba485003 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -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;