]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link/internal/ld: pass correct offset to codesign.Sign
authorChristian Banse <christian.banse@me.com>
Fri, 21 Apr 2023 15:13:17 +0000 (15:13 +0000)
committerCherry Mui <cherryyz@google.com>
Thu, 1 Jun 2023 17:49:36 +0000 (17:49 +0000)
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>

src/cmd/link/internal/ld/macho.go

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