Skip to content

Commit

Permalink
cmd/link: don't emit PAX_FLAGS segment on Linux
Browse files Browse the repository at this point in the history
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 <[email protected]>
Auto-Submit: Ian Lance Taylor <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
  • Loading branch information
ianlancetaylor authored and gopherbot committed Feb 25, 2023
1 parent 203e59a commit ffb07d0
Showing 1 changed file with 1 addition and 11 deletions.
12 changes: 1 addition & 11 deletions src/cmd/link/internal/ld/elf.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit ffb07d0

Please sign in to comment.