diff options
| author | Christian Banse <christian.banse@me.com> | 2023-04-21 15:13:17 +0000 |
|---|---|---|
| committer | Cherry Mui <cherryyz@google.com> | 2023-06-01 17:49:36 +0000 |
| commit | 7dc8509c693c6e6dfa7bdcebdb9d62058b14b509 (patch) | |
| tree | dcd62639a356b1048b92b1404442da1e8b96dc41 /src/cmd/link | |
| parent | 73a29bad0bd24cdd70bbf468fa12fbe7760ef47d (diff) | |
| download | go-7dc8509c693c6e6dfa7bdcebdb9d62058b14b509.tar.xz | |
cmd/link/internal/ld: pass correct offset to codesign.Sign
Previously, codesign.Sign was called with Segtext.Fileoff and
Segtext.Filelen. However, both variables do not contain the
complete __TEXT segment, as it excludes padding and header.
Therefore, we now store a reference to the complete segment
in mstext when it is created and pass its offset (which should
always be 0) and filesize to codesign.Sign.
Fixes #59555
Change-Id: Iad88f142705949dcc0b192b811337df9b4be08cf
GitHub-Last-Rev: 37a048d58e01a3befa4db574e5fb48ab8d6013a1
GitHub-Pull-Request: golang/go#59581
Reviewed-on: https://go-review.googlesource.com/c/go/+/484015
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/cmd/link')
| -rw-r--r-- | src/cmd/link/internal/ld/macho.go | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index d6c28e4790..e43a1aa002 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -710,6 +710,7 @@ func asmbMacho(ctxt *Link) { /* text */ v := Rnd(int64(uint64(HEADR)+Segtext.Length), int64(*FlagRound)) + var mstext *MachoSeg if ctxt.LinkMode != LinkExternal { ms = newMachoSeg("__TEXT", 20) ms.vaddr = uint64(va) @@ -718,6 +719,7 @@ func asmbMacho(ctxt *Link) { ms.filesize = uint64(v) ms.prot1 = 7 ms.prot2 = 5 + mstext = ms } for _, sect := range Segtext.Sections { @@ -868,7 +870,7 @@ func asmbMacho(ctxt *Link) { if int64(len(data)) != codesigOff { panic("wrong size") } - codesign.Sign(ldr.Data(cs), bytes.NewReader(data), "a.out", codesigOff, int64(Segtext.Fileoff), int64(Segtext.Filelen), ctxt.IsExe() || ctxt.IsPIE()) + codesign.Sign(ldr.Data(cs), bytes.NewReader(data), "a.out", codesigOff, int64(mstext.fileoffset), int64(mstext.filesize), ctxt.IsExe() || ctxt.IsPIE()) ctxt.Out.SeekSet(codesigOff) ctxt.Out.Write(ldr.Data(cs)) } |
