From: Ian Lance Taylor Date: Thu, 19 Oct 2023 00:30:31 +0000 (-0700) Subject: debug/elf: return error in DynString for invalid dynamic section size X-Git-Tag: go1.22rc1~517 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=57322b3cbf1ed26c3b19c6edcd5758c794a36467;p=gostls13.git debug/elf: return error in DynString for invalid dynamic section size No test case because the problem can only happen for invalid data. Let the fuzzer find cases like this. Fixes #63610 Change-Id: I797b4d9bdb08286ad3e3a9a6f800ee8c90cb7261 Reviewed-on: https://go-review.googlesource.com/c/go/+/536400 Reviewed-by: Than McIntosh Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Mauri de Souza Meneguzzo --- diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index e748716cb7..fcbe76b195 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -1607,6 +1607,15 @@ func (f *File) DynString(tag DynTag) ([]string, error) { if err != nil { return nil, err } + + dynSize := 8 + if f.Class == ELFCLASS64 { + dynSize = 16 + } + if len(d)%dynSize != 0 { + return nil, errors.New("length of dynamic section is not a multiple of dynamic entry size") + } + str, err := f.stringTable(ds.Link) if err != nil { return nil, err