From 31bfab4ac621e81100d7fc3bc8cf483c5d2d2fef Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sat, 26 Oct 2019 22:41:31 +0200 Subject: [PATCH] cmd/link: enable DEP for Windows executables There's no reason not to enable DEP in 2019, especially given Go's minimum operating system level. RELNOTE=yes Change-Id: I9c3bbc5b05a1654876a218123dd57b9c9077b780 Reviewed-on: https://go-review.googlesource.com/c/go/+/203601 Reviewed-by: Alex Brainman --- src/cmd/link/internal/ld/lib.go | 3 +++ src/cmd/link/internal/ld/pe.go | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 3924de530b..1edf8cf407 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1188,6 +1188,9 @@ func (ctxt *Link) hostlink() { // ancient compatibility hacks. argv = append(argv, "-Wl,--tsaware") + // Enable DEP + argv = append(argv, "-Wl,--nxcompat") + argv = append(argv, fmt.Sprintf("-Wl,--major-os-version=%d", PeMinimumTargetMajorVersion)) argv = append(argv, fmt.Sprintf("-Wl,--minor-os-version=%d", PeMinimumTargetMinorVersion)) argv = append(argv, fmt.Sprintf("-Wl,--major-subsystem-version=%d", PeMinimumTargetMajorVersion)) diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 12363626ae..b5851a94a0 100644 --- a/src/cmd/link/internal/ld/pe.go +++ b/src/cmd/link/internal/ld/pe.go @@ -861,14 +861,18 @@ func (f *peFile) writeOptionalHeader(ctxt *Link) { switch ctxt.Arch.Family { case sys.ARM: - oh64.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT - oh.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT + oh64.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE + oh.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE } // Mark as having awareness of terminal services, to avoid ancient compatibility hacks. oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE + // Enable DEP + oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_NX_COMPAT + oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_NX_COMPAT + // Disable stack growth as we don't want Windows to // fiddle with the thread stack limits, which we set // ourselves to circumvent the stack checks in the -- 2.50.0