]> Cypherpunks.ru repositories - gostls13.git/commitdiff
debug/elf: validate shstrndx
authorZeke Lu <lvzecai@gmail.com>
Thu, 15 Sep 2022 03:57:43 +0000 (03:57 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 19 Sep 2022 17:01:22 +0000 (17:01 +0000)
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 <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/debug/elf/file.go

index f37d4b8e9add355f4cd896565459854312842c11..aff2b00aae3bcf84283a316e2fa65f2461a31ea7 100644 (file)
@@ -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
        }