From b6d5831caa219aa00574fbacb1026585cf11d6b4 Mon Sep 17 00:00:00 2001 From: Zeke Lu Date: Thu, 15 Sep 2022 03:57:43 +0000 Subject: [PATCH] debug/elf: validate shstrndx Changes: 1. When e_shstrndx holds the value SHN_UNDEF (0), the file has no section name string table. In this case, do not try to set section names . 2. e_shstrndx should point to an SHT_STRTAB section. If it does not, returns an error. Reference: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html Updates #54967. Change-Id: Ic8f228061d996fd7845dfa630719a1ba12d2bb60 GitHub-Last-Rev: aeb70ca8a08e7dbc36ed61bd5a2dabcf432540e9 GitHub-Pull-Request: golang/go#55001 Reviewed-on: https://go-review.googlesource.com/c/go/+/430155 Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Mui Run-TryBot: Ian Lance Taylor TryBot-Result: Gopher Robot --- src/debug/elf/file.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index f37d4b8e9a..aff2b00aae 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -474,7 +474,16 @@ func NewFile(r io.ReaderAt) (*File, error) { } // Load section header string table. - shstrtab, err := f.Sections[shstrndx].Data() + if shstrndx == 0 { + // If the file has no section name string table, + // shstrndx holds the value SHN_UNDEF (0). + return f, nil + } + shstr := f.Sections[shstrndx] + if shstr.Type != SHT_STRTAB { + return nil, &FormatError{shoff + int64(shstrndx*shentsize), "invalid ELF section name string table type", shstr.Type} + } + shstrtab, err := shstr.Data() if err != nil { return nil, err } -- 2.50.0