From 7b63a56ed3c4e316f32c29218579eab10164ddc5 Mon Sep 17 00:00:00 2001 From: Lynn Boger Date: Mon, 28 Oct 2019 09:29:40 -0400 Subject: [release-branch.go1.12] runtime: fix textOff for multiple text sections If a compilation has multiple text sections, code in textOff must compare the offset argument against the range for each text section to determine which one it is in. The comparison looks like this: if uintptr(off) >= sectaddr && uintptr(off) <= sectaddr+sectlen If the off value being compared is equal to sectaddr+sectlen then it is not within the range of the text section but after it. The comparison should be just '<'. Fixes #35210 Change-Id: I114633fd734563d38f4e842dd884c6c239f73c95 Reviewed-on: https://go-review.googlesource.com/c/go/+/203817 Run-TryBot: Lynn Boger TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Zhang (cherry picked from commit 0ae9389609f23dc905c58fc2ad7bcc16b770f337) Reviewed-on: https://go-review.googlesource.com/c/go/+/203818 Run-TryBot: Carlos Amedee Reviewed-by: Keith Randall --- src/runtime/type.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/type.go b/src/runtime/type.go index f7f99924ea..a393da19f7 100644 --- a/src/runtime/type.go +++ b/src/runtime/type.go @@ -290,7 +290,7 @@ func (t *_type) textOff(off textOff) unsafe.Pointer { for i := range md.textsectmap { sectaddr := md.textsectmap[i].vaddr sectlen := md.textsectmap[i].length - if uintptr(off) >= sectaddr && uintptr(off) <= sectaddr+sectlen { + if uintptr(off) >= sectaddr && uintptr(off) < sectaddr+sectlen { res = md.textsectmap[i].baseaddr + uintptr(off) - uintptr(md.textsectmap[i].vaddr) break } -- cgit v1.2.3-54-g00ecf