aboutsummaryrefslogtreecommitdiff
path: root/src/debug/elf
diff options
context:
space:
mode:
authorVictor Michel <victor@optimyze.cloud>2021-06-11 05:44:00 +0000
committerIan Lance Taylor <iant@golang.org>2021-06-14 22:13:47 +0000
commit8a5a6f46dc51597174d0044dcd3bdffa950ae65e (patch)
treeb45098d5bdbcfebea58a3acb1d437a86d531aed7 /src/debug/elf
parent9d13f8d43e88a349762c61aee84614ac83dab521 (diff)
downloadgo-8a5a6f46dc51597174d0044dcd3bdffa950ae65e.tar.xz
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 Change-Id: I2b4214f1584bfc243446d0eaee41512657325b95 GitHub-Last-Rev: 8350fad059e70422d13dfaa5bab7fb8a56c0f76f GitHub-Pull-Request: golang/go#46698 Reviewed-on: https://go-review.googlesource.com/c/go/+/327009 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/debug/elf')
-rw-r--r--src/debug/elf/file.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go
index cd5bf8fab0..b25d8209e3 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