From daf53d3780947cecfbd05614e7a94f71a74d89fc Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Wed, 29 Nov 2023 23:52:05 +0800 Subject: [PATCH 1/2] debug/elf: return error in DynValue for invalid dynamic section size This is a follow-up to CL 536400. Fixes #64446 --- src/debug/elf/file.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index fcbe76b195bd20..26ef6f17d17f57 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -1659,6 +1659,14 @@ func (f *File) DynValue(tag DynTag) ([]uint64, error) { // Parse the .dynamic section as a string of bytes. var vals []uint64 for len(d) > 0 { + 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") + } + var t DynTag var v uint64 switch f.Class { From 55db18a909fd44e6b2f2b98fd1a44ad01bb37932 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Thu, 30 Nov 2023 00:15:03 +0800 Subject: [PATCH 2/2] re --- src/debug/elf/file.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index 26ef6f17d17f57..7228447c2128fe 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -1656,17 +1656,17 @@ func (f *File) DynValue(tag DynTag) ([]uint64, error) { 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") + } + // Parse the .dynamic section as a string of bytes. var vals []uint64 for len(d) > 0 { - 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") - } - var t DynTag var v uint64 switch f.Class {