mirror of
https://github.com/golang/go
synced 2024-11-14 17:40:28 -07:00
[release-branch.go1.15] cmd/link/internal/ld/pe: fix segfault adding resource section
The resource symbol may have been copied to the mmap'd
output buffer. If so, certain conditions can cause that
mmap'd output buffer to be munmap'd before we get a chance
to use it. To avoid any issues we copy the data to the heap
when the resource symbol exists.
Fixes #42384
Change-Id: I32ef5420802d7313a3d965b8badfbcfb9f0fba4a
GitHub-Last-Rev: 7b0f43011d
GitHub-Pull-Request: golang/go#42427
Reviewed-on: https://go-review.googlesource.com/c/go/+/268018
Run-TryBot: Carlos Amedee <carlos@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Trust: Carlos Amedee <carlos@golang.org>
This commit is contained in:
parent
4a48a7d7bd
commit
aa9b48cd18
@ -1515,6 +1515,18 @@ func Asmbpe(ctxt *Link) {
|
||||
case sys.AMD64, sys.I386, sys.ARM:
|
||||
}
|
||||
|
||||
if rsrcsym != 0 {
|
||||
// The resource symbol may have been copied to the mmap'd
|
||||
// output buffer. If so, certain conditions can cause that
|
||||
// mmap'd output buffer to be munmap'd before we get a chance
|
||||
// to use it. To avoid any issues we copy the data to the heap
|
||||
// when the resource symbol exists.
|
||||
rsrc := ctxt.loader.Syms[rsrcsym]
|
||||
data := make([]byte, len(rsrc.P))
|
||||
copy(data, rsrc.P)
|
||||
rsrc.P = data
|
||||
}
|
||||
|
||||
t := pefile.addSection(".text", int(Segtext.Length), int(Segtext.Length))
|
||||
t.characteristics = IMAGE_SCN_CNT_CODE | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ
|
||||
if ctxt.LinkMode == LinkExternal {
|
||||
|
Loading…
Reference in New Issue
Block a user