From 8350fad059e70422d13dfaa5bab7fb8a56c0f76f Mon Sep 17 00:00:00 2001 From: Victor Michel Date: Thu, 10 Jun 2021 22:14:33 -0700 Subject: [PATCH] debug/elf: don't apply DWARF relocations for ET_EXEC binaries Some ET_EXEC binaries might have relocations for non-loadable sections like .debug_info. These relocations must not be applied, because: * They may be incorrect * The correct relocations were already applied at link time Binaries in Linux Kernel debug packages like Fedora/Centos kernel-debuginfo are such examples. Relocations for .debug_* sections are included in the final binaries because they are compiled with --emit-relocs, but the resulting relocations are incorrect and shouldn't be used when reading DWARF sections. Fixes #46673 --- src/debug/elf/file.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index cd5bf8fab00..b25d8209e36 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -1164,6 +1164,13 @@ func (f *File) DWARF() (*dwarf.Data, error) { b = dbuf } + if f.Type == ET_EXEC { + // Do not apply relocations to DWARF sections for ET_EXEC binaries. + // Relocations should already be applied, and .rela sections may + // contain incorrect data. + return b, nil + } + for _, r := range f.Sections { if r.Type != SHT_RELA && r.Type != SHT_REL { continue