Skip to content

Commit 45bd847

Browse files
committed
(PA-6383) add PIE compile flags to runtimes with platform support
1 parent f4f021c commit 45bd847

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

configs/projects/_shared-client-tools-runtime.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,16 @@
9696
proj.setting(:cppflags, "-I#{proj.includedir} -I/opt/pl-build-tools/include")
9797
proj.setting(:cflags, "#{proj.cppflags}")
9898
proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}")
99+
100+
# Harden Linux ELF binaries by compiling with PIE (Position Independent Executables) support,
101+
# stack canary and full RELRO.
102+
# We only do this on platforms that use their default OS toolchain since pl-gcc versions
103+
# are too old to support these flags.
104+
if (platform.is_sles? && platform.os_version.to_i >= 15) || (platform.is_el? && platform.os_version.to_i >= 8) || platform.is_debian? || (platform.is_ubuntu? && platform.os_version.to_i >= 20) || platform.is_fedora?
105+
proj.setting(:cppflags, "-I#{proj.includedir} -D_FORTIFY_SOURCE=2")
106+
proj.setting(:cflags, '-fstack-protector-strong -fno-plt -O2')
107+
proj.setting(:ldflags, "-L#{proj.libdir} -Wl,-rpath=#{proj.libdir},-z,relro,-z,now")
108+
end
99109
end
100110

101111
# What to build?

configs/projects/_shared-pe-installer-runtime.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@
3737
proj.setting(:cflags, "#{proj.cppflags}")
3838
proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}")
3939

40+
# Harden Linux ELF binaries by compiling with PIE (Position Independent Executables) support,
41+
# stack canary and full RELRO.
42+
# We only do this on platforms that use their default OS toolchain since pl-gcc versions
43+
# are too old to support these flags.
44+
if (platform.is_sles? && platform.os_version.to_i >= 15) || (platform.is_el? && platform.os_version.to_i >= 8) || platform.is_debian? || (platform.is_ubuntu? && platform.os_version.to_i >= 20) || platform.is_fedora?
45+
proj.setting(:cppflags, "-I#{proj.includedir} -D_FORTIFY_SOURCE=2")
46+
proj.setting(:cflags, '-fstack-protector-strong -fno-plt -O2')
47+
proj.setting(:ldflags, "-L#{proj.libdir} -Wl,-rpath=#{proj.libdir},-z,relro,-z,now")
48+
end
49+
4050
# These flags are applied in addition to the defaults in configs/component/openssl.rb.
4151
proj.setting(:openssl_extra_configure_flags, [
4252
'no-dtls',

configs/projects/bolt-runtime.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@
7272
proj.setting(:cflags, "#{proj.cppflags}")
7373
proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}")
7474

75+
# Harden Linux ELF binaries by compiling with PIE (Position Independent Executables) support,
76+
# stack canary and full RELRO.
77+
# We only do this on platforms that use their default OS toolchain since pl-gcc versions
78+
# are too old to support these flags.
79+
if (platform.is_sles? && platform.os_version.to_i >= 15) || (platform.is_el? && platform.os_version.to_i >= 8) || platform.is_debian? || (platform.is_ubuntu? && platform.os_version.to_i >= 20) || platform.is_fedora?
80+
proj.setting(:cppflags, "-I#{proj.includedir} -D_FORTIFY_SOURCE=2")
81+
proj.setting(:cflags, '-fstack-protector-strong -fno-plt -O2')
82+
proj.setting(:ldflags, "-L#{proj.libdir} -Wl,-rpath=#{proj.libdir},-z,relro,-z,now")
83+
end
84+
7585
# Platform specific overrides or settings, which may override the defaults
7686
if platform.is_windows?
7787
arch = platform.architecture == "x64" ? "64" : "32"

configs/projects/pdk-runtime.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@
117117
proj.setting(:cflags, proj.cppflags.to_s)
118118
proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}")
119119

120+
# Harden Linux ELF binaries by compiling with PIE (Position Independent Executables) support,
121+
# stack canary and full RELRO.
122+
# We only do this on platforms that use their default OS toolchain since pl-gcc versions
123+
# are too old to support these flags.
124+
if (platform.is_sles? && platform.os_version.to_i >= 15) || (platform.is_el? && platform.os_version.to_i >= 8) || platform.is_debian? || (platform.is_ubuntu? && platform.os_version.to_i >= 20) || platform.is_fedora?
125+
proj.setting(:cppflags, "-I#{proj.includedir} -D_FORTIFY_SOURCE=2")
126+
proj.setting(:cflags, '-fstack-protector-strong -fno-plt -O2')
127+
proj.setting(:ldflags, "-L#{proj.libdir} -Wl,-rpath=#{proj.libdir},-z,relro,-z,now")
128+
end
129+
120130
if platform.is_windows?
121131
proj.setting(:gcc_root, 'C:/tools/mingw64')
122132
proj.setting(:gcc_bindir, "#{proj.gcc_root}/bin")

0 commit comments

Comments
 (0)