git: c6e7c894c665 - main - features: Add support to build ports as PIE executables.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 26 Oct 2022 08:34:45 UTC
The branch main has been updated by bapt:
URL: https://cgit.FreeBSD.org/ports/commit/?id=c6e7c894c6657af42a49dfdffee5de8b8c69e422
commit c6e7c894c6657af42a49dfdffee5de8b8c69e422
Author: Jatin Kataria <jatinkataria1@gmail.com>
AuthorDate: 2022-10-14 22:27:35 +0000
Commit: Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2022-10-26 08:22:12 +0000
features: Add support to build ports as PIE executables.
This will allow utilization of ASLR provided by the kernel.
Sponsored by: Netflix
---
Mk/Features/pie.mk | 14 ++++++++++++++
Mk/Uses/go.mk | 7 ++++++-
Mk/bsd.port.mk | 9 ++++++---
3 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/Mk/Features/pie.mk b/Mk/Features/pie.mk
new file mode 100644
index 000000000000..73bbe9b24c19
--- /dev/null
+++ b/Mk/Features/pie.mk
@@ -0,0 +1,14 @@
+# PIE Support
+
+.if !defined(_PIE_MK_INCLUDED)
+_PIE_MK_INCLUDED= yes
+PIE_Include_MAINTAINER= portmgr@FreeBSD.org
+
+. if !defined(PIE_UNSAFE)
+PIE_CFLAGS?= -fPIE -fPIC
+CFLAGS+= ${PIE_CFLAGS}
+CXXFLAGS+= ${PIE_CFLAGS}
+LDFLAGS+= -pie
+. endif
+.endif
+
diff --git a/Mk/Uses/go.mk b/Mk/Uses/go.mk
index 9ae32ca267bc..d75c4c2f0fe1 100644
--- a/Mk/Uses/go.mk
+++ b/Mk/Uses/go.mk
@@ -90,7 +90,12 @@ GO_PKGNAME= ${PORTNAME}
GO_TARGET?= ${GO_PKGNAME}
GO_TESTTARGET?= ./...
-GO_BUILDFLAGS+= -v -buildmode=exe -trimpath
+.if !defined(PIE_UNSAFE)
+GO_BUILDFLAGS+= -buildmode=pie
+.else
+GO_BUILDFLAGS+= -buildmode=exe
+.endif
+GO_BUILDFLAGS+= -v -trimpath
. if !defined(WITH_DEBUG) && empty(GO_BUILDFLAGS:M-ldflags*)
GO_BUILDFLAGS+= -ldflags=-s
. endif
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index a6543b0e069f..717a0efdee6f 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -339,6 +339,11 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org
# can be used in Makefiles by port maintainers
# if a port breaks with it (it should be
# extremely rare).
+# PIE_CFLAGS - Defaults to -fPIE -fPIC. This value
+# is added to CFLAGS and the necessary flags
+# are added to LDFLAGS. Note that PIE_UNSAFE
+# can be used in Makefiles by port maintainers
+# if a port breaks with it.
##
# USE_LOCALE - LANG and LC_ALL are set to the value of this variable in
# CONFIGURE_ENV and MAKE_ENV. Example: USE_LOCALE=en_US.UTF-8
@@ -1012,7 +1017,7 @@ LC_ALL= C
# These need to be absolute since we don't know how deep in the ports
# tree we are and thus can't go relative. They can, of course, be overridden
# by individual Makefiles or local system make configuration.
-_LIST_OF_WITH_FEATURES= debug lto ssp
+_LIST_OF_WITH_FEATURES= debug lto ssp pie
_DEFAULT_WITH_FEATURES= ssp
PORTSDIR?= /usr/ports
LOCALBASE?= /usr/local
@@ -1776,8 +1781,6 @@ CFLAGS:= ${CFLAGS:C/${_CPUCFLAGS}//}
. endif
. endfor
-# XXX PIE support to be added here
-MAKE_ENV+= NO_PIE=yes
# We will control debug files. Don't let builds that use /usr/share/mk
# split out debug symbols since the plist won't know to expect it.
MAKE_ENV+= MK_DEBUG_FILES=no