]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: don't emit PAX_FLAGS segment on Linux
authorIan Lance Taylor <iant@golang.org>
Fri, 24 Feb 2023 23:52:58 +0000 (15:52 -0800)
committerGopher Robot <gobot@golang.org>
Sat, 25 Feb 2023 00:15:17 +0000 (00:15 +0000)
We started emitting this segment in 2012 in CL 6326054 for #47.
It disabled three kinds of protection: mprotect, randexec, and emutramp.
The randexec protection was deprecated some time ago, replaced by PIE.
The emutramp and mprotect protection was because we used to rely on being
able to create writable executable memory to implement function closures,
but that is not true since https://go.dev/s/go11func was implemented.

Change-Id: I5e3a5279d76d642b0423d26195b891479a235763
Reviewed-on: https://go-review.googlesource.com/c/go/+/471199
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/link/internal/ld/elf.go

index 5eeb4a9993fef4c0db3597c9194cc24a8da469e7..842570d5ef3a46badec1afe24e7f4c84c283646b 100644 (file)
@@ -2135,25 +2135,15 @@ func asmbElf(ctxt *Link) {
                }
        }
 
-       if ctxt.HeadType == objabi.Hlinux {
+       if ctxt.HeadType == objabi.Hlinux || ctxt.HeadType == objabi.Hfreebsd {
                ph := newElfPhdr()
                ph.Type = elf.PT_GNU_STACK
                ph.Flags = elf.PF_W + elf.PF_R
                ph.Align = uint64(ctxt.Arch.RegSize)
-
-               ph = newElfPhdr()
-               ph.Type = elf.PT_PAX_FLAGS
-               ph.Flags = 0x2a00 // mprotect, randexec, emutramp disabled
-               ph.Align = uint64(ctxt.Arch.RegSize)
        } else if ctxt.HeadType == objabi.Hsolaris {
                ph := newElfPhdr()
                ph.Type = elf.PT_SUNWSTACK
                ph.Flags = elf.PF_W + elf.PF_R
-       } else if ctxt.HeadType == objabi.Hfreebsd {
-               ph := newElfPhdr()
-               ph.Type = elf.PT_GNU_STACK
-               ph.Flags = elf.PF_W + elf.PF_R
-               ph.Align = uint64(ctxt.Arch.RegSize)
        }
 
 elfobj: