Don't read build-id ELF Note in .debug file through phdrs.

Bug #393062 - Reading build-id ELF note through phdrs triggers
              "debuginfo reader: ensure_valid failed"

Skip the phdrs when we have to search the shdrs. In separate
.debug files the phdrs might not be valid (they are a copy of
the main ELF file) and might trigger assertions when getting
image notes based on them.
This commit is contained in:
Mark Wielaard 2018-04-16 16:53:56 +02:00
parent 532ed8a48b
commit f1f543a224
2 changed files with 6 additions and 1 deletions

1
NEWS
View File

@ -104,6 +104,7 @@ where XXXXXX is the bug number as listed below.
393017 Add missing support for xsmaxcdp instruction, bug fixes for xsmincdp,
lxssp, stxssp and stxvl instructions.
393023 callgrind_control risks using the wrong vgdb
393062 build-id ELF phdrs read causes "debuginfo reader: ensure_valid failed"
393099 posix_memalign() invalid write if alignment == 0
n-i-bz Fix missing workq_ops operations (macOS)

View File

@ -1137,7 +1137,11 @@ HChar* find_buildid(DiImage* img, Bool rel_ok, Bool search_shdrs)
ElfXX_Ehdr ehdr;
ML_(img_get)(&ehdr, img, 0, sizeof(ehdr));
for (i = 0; i < ehdr.e_phnum; i++) {
/* Skip the phdrs when we have to search the shdrs. In separate
.debug files the phdrs might not be valid (they are a copy of
the main ELF file) and might trigger assertions when getting
image notes based on them. */
for (i = 0; !search_shdrs && i < ehdr.e_phnum; i++) {
ElfXX_Phdr phdr;
ML_(img_get)(&phdr, img,
ehdr.e_phoff + i * ehdr.e_phentsize, sizeof(phdr));