From 31e12b953a2a8fa5f3c849da18ded575c5737532 Mon Sep 17 00:00:00 2001 From: "Paul E. Murphy" Date: Mon, 5 Apr 2021 13:36:13 -0500 Subject: [PATCH] cmd/link: issue error if elf header overruns This is probably unlikely in practice, but when debugging alignment related issues on ppc64 using very small text section splits, the elf header could grow beyond the preallocated space and quietly stomp on the first few text sections. Change-Id: Ided58aa0b1e60f9da4b3cb277e4ebafcee4ec693 Reviewed-on: https://go-review.googlesource.com/c/go/+/307430 Reviewed-by: Cherry Zhang Reviewed-by: Lynn Boger Run-TryBot: Cherry Zhang TryBot-Result: Go Bot Trust: Lynn Boger --- src/cmd/link/internal/ld/elf.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index b4af0931cc..3ba9f329ee 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -2194,6 +2194,12 @@ elfobj: if a > elfreserve { Errorf(nil, "ELFRESERVE too small: %d > %d with %d text sections", a, elfreserve, numtext) } + + // Verify the amount of space allocated for the elf header is sufficient. The file offsets are + // already computed in layout, so we could spill into another section. + if a > int64(HEADR) { + Errorf(nil, "HEADR too small: %d > %d with %d text sections", a, HEADR, numtext) + } } func elfadddynsym(ldr *loader.Loader, target *Target, syms *ArchSyms, s loader.Sym) { -- 2.50.0