From: Shawn Walker-Salas Date: Wed, 15 Jun 2016 20:44:03 +0000 (-0700) Subject: cmd/link: non-executable stack support for Solaris X-Git-Tag: go1.8beta1~929 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f373bf1eb9a21f843dc0094c3702c2855a2e0d3f;p=gostls13.git cmd/link: non-executable stack support for Solaris Support the tagging of binaries created with the internal linker on Solaris as having a non-executable stack by writing a PT_SUNWSTACK program header. Fixes #16074 Change-Id: I3888f2153083385d04a52f341570f93e5738b276 Reviewed-on: https://go-review.googlesource.com/24142 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Russ Cox --- diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 70681b3262..636900e6eb 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -238,6 +238,7 @@ const ( PT_GNU_STACK = 0x6474e551 PT_GNU_RELRO = 0x6474e552 PT_PAX_FLAGS = 0x65041580 + PT_SUNWSTACK = 0x6ffffffb PF_X = 0x1 PF_W = 0x2 PF_R = 0x4 @@ -2550,6 +2551,10 @@ func Asmbelf(ctxt *Link, symo int64) { ph.type_ = PT_PAX_FLAGS ph.flags = 0x2a00 // mprotect, randexec, emutramp disabled ph.align = uint64(SysArch.RegSize) + } else if Headtype == obj.Hsolaris { + ph := newElfPhdr() + ph.type_ = PT_SUNWSTACK + ph.flags = PF_W + PF_R } elfobj: