]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Don't read build-id ELF Note in .debug file through phdrs.
authorMark Wielaard <mark@klomp.org>
Mon, 16 Apr 2018 14:53:56 +0000 (16:53 +0200)
committerMark Wielaard <mark@klomp.org>
Mon, 16 Apr 2018 14:55:46 +0000 (16:55 +0200)
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.

NEWS
coregrind/m_debuginfo/readelf.c

diff --git a/NEWS b/NEWS
index ce01442d4730ae1da07875cc36e4317361edca4b..95a619655720065fdb13cc6b896906321bf3935a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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)
index 70c28e629240496eff733dc590f23b84cb3f7d46..62192f00e1427ea8737077827154a3f06f64c479 100644 (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));