Skip to content

Commit 475e605

Browse files
stewartsmithnfont
authored andcommitted
check for and use gcc hardening flags if available
Signed-off-by: Stewart Smith <[email protected]>
1 parent 63d6bcc commit 475e605

7 files changed

+334
-0
lines changed

Makefile.am

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
SUBDIRS = src man scripts
22

3+
ACLOCAL_AMFLAGS = -I m4
4+
35
docdir = $(datadir)/doc/packages/@PACKAGE@
46
doc_DATA = README COPYRIGHT
57

configure.ac

+14
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,20 @@ AS_IF([test "x$with_librtas" != "xno"],
5555

5656
AM_CONDITIONAL([WITH_LIBRTAS], [test "x$with_librtas" = "xyes"])
5757

58+
AC_DEFUN([LOCAL_CHECK_FLAGS],[
59+
AC_REQUIRE([AX_CHECK_LINK_FLAG])
60+
AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
61+
AC_LANG_PUSH([C])
62+
AX_APPEND_COMPILE_FLAGS([-Wall])
63+
AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2 -fstack-protector-all])
64+
AX_APPEND_COMPILE_FLAGS([-fwrapv -fPIE -Wstack-protector])
65+
AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1])
66+
AX_CHECK_LINK_FLAG([-z relro -z now])
67+
AX_CHECK_LINK_FLAG([-pie])
68+
AC_LANG_POP
69+
])
70+
LOCAL_CHECK_FLAGS
71+
5872
echo "Configuring powerpc-utils.spec"
5973
sed "s|\@VERSION\@|ppu_version|g" powerpc-utils.spec.in > powerpc-utils.spec
6074

m4/ax_append_compile_flags.m4

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# ===========================================================================
2+
# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
8+
#
9+
# DESCRIPTION
10+
#
11+
# For every FLAG1, FLAG2 it is checked whether the compiler works with the
12+
# flag. If it does, the flag is added FLAGS-VARIABLE
13+
#
14+
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
15+
# CFLAGS) is used. During the check the flag is always added to the
16+
# current language's flags.
17+
#
18+
# If EXTRA-FLAGS is defined, it is added to the current language's default
19+
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
20+
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
21+
# force the compiler to issue an error when a bad flag is given.
22+
#
23+
# NOTE: This macro depends on the AX_APPEND_FLAG and
24+
# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
25+
# AX_APPEND_LINK_FLAGS.
26+
#
27+
# LICENSE
28+
#
29+
# Copyright (c) 2011 Maarten Bosmans <[email protected]>
30+
#
31+
# This program is free software: you can redistribute it and/or modify it
32+
# under the terms of the GNU General Public License as published by the
33+
# Free Software Foundation, either version 3 of the License, or (at your
34+
# option) any later version.
35+
#
36+
# This program is distributed in the hope that it will be useful, but
37+
# WITHOUT ANY WARRANTY; without even the implied warranty of
38+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
39+
# Public License for more details.
40+
#
41+
# You should have received a copy of the GNU General Public License along
42+
# with this program. If not, see <http://www.gnu.org/licenses/>.
43+
#
44+
# As a special exception, the respective Autoconf Macro's copyright owner
45+
# gives unlimited permission to copy, distribute and modify the configure
46+
# scripts that are the output of Autoconf when processing the Macro. You
47+
# need not follow the terms of the GNU General Public License when using
48+
# or distributing such scripts, even though portions of the text of the
49+
# Macro appear in them. The GNU General Public License (GPL) does govern
50+
# all other use of the material that constitutes the Autoconf Macro.
51+
#
52+
# This special exception to the GPL applies to versions of the Autoconf
53+
# Macro released by the Autoconf Archive. When you make and distribute a
54+
# modified version of the Autoconf Macro, you may extend this special
55+
# exception to the GPL to apply to your modified version as well.
56+
57+
#serial 4
58+
59+
AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
60+
[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
61+
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
62+
for flag in $1; do
63+
AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3])
64+
done
65+
])dnl AX_APPEND_COMPILE_FLAGS

m4/ax_append_flag.m4

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# ===========================================================================
2+
# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
8+
#
9+
# DESCRIPTION
10+
#
11+
# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
12+
# added in between.
13+
#
14+
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
15+
# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains
16+
# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly
17+
# FLAG.
18+
#
19+
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
20+
#
21+
# LICENSE
22+
#
23+
# Copyright (c) 2008 Guido U. Draheim <[email protected]>
24+
# Copyright (c) 2011 Maarten Bosmans <[email protected]>
25+
#
26+
# This program is free software: you can redistribute it and/or modify it
27+
# under the terms of the GNU General Public License as published by the
28+
# Free Software Foundation, either version 3 of the License, or (at your
29+
# option) any later version.
30+
#
31+
# This program is distributed in the hope that it will be useful, but
32+
# WITHOUT ANY WARRANTY; without even the implied warranty of
33+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
34+
# Public License for more details.
35+
#
36+
# You should have received a copy of the GNU General Public License along
37+
# with this program. If not, see <http://www.gnu.org/licenses/>.
38+
#
39+
# As a special exception, the respective Autoconf Macro's copyright owner
40+
# gives unlimited permission to copy, distribute and modify the configure
41+
# scripts that are the output of Autoconf when processing the Macro. You
42+
# need not follow the terms of the GNU General Public License when using
43+
# or distributing such scripts, even though portions of the text of the
44+
# Macro appear in them. The GNU General Public License (GPL) does govern
45+
# all other use of the material that constitutes the Autoconf Macro.
46+
#
47+
# This special exception to the GPL applies to versions of the Autoconf
48+
# Macro released by the Autoconf Archive. When you make and distribute a
49+
# modified version of the Autoconf Macro, you may extend this special
50+
# exception to the GPL to apply to your modified version as well.
51+
52+
#serial 2
53+
54+
AC_DEFUN([AX_APPEND_FLAG],
55+
[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
56+
AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])dnl
57+
AS_VAR_SET_IF(FLAGS,
58+
[case " AS_VAR_GET(FLAGS) " in
59+
*" $1 "*)
60+
AC_RUN_LOG([: FLAGS already contains $1])
61+
;;
62+
*)
63+
AC_RUN_LOG([: FLAGS="$FLAGS $1"])
64+
AS_VAR_SET(FLAGS, ["AS_VAR_GET(FLAGS) $1"])
65+
;;
66+
esac],
67+
[AS_VAR_SET(FLAGS,["$1"])])
68+
AS_VAR_POPDEF([FLAGS])dnl
69+
])dnl AX_APPEND_FLAG

m4/ax_check_compile_flag.m4

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# ===========================================================================
2+
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
8+
#
9+
# DESCRIPTION
10+
#
11+
# Check whether the given FLAG works with the current language's compiler
12+
# or gives an error. (Warnings, however, are ignored)
13+
#
14+
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
15+
# success/failure.
16+
#
17+
# If EXTRA-FLAGS is defined, it is added to the current language's default
18+
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
19+
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
20+
# force the compiler to issue an error when a bad flag is given.
21+
#
22+
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
23+
#
24+
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
25+
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
26+
#
27+
# LICENSE
28+
#
29+
# Copyright (c) 2008 Guido U. Draheim <[email protected]>
30+
# Copyright (c) 2011 Maarten Bosmans <[email protected]>
31+
#
32+
# This program is free software: you can redistribute it and/or modify it
33+
# under the terms of the GNU General Public License as published by the
34+
# Free Software Foundation, either version 3 of the License, or (at your
35+
# option) any later version.
36+
#
37+
# This program is distributed in the hope that it will be useful, but
38+
# WITHOUT ANY WARRANTY; without even the implied warranty of
39+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
40+
# Public License for more details.
41+
#
42+
# You should have received a copy of the GNU General Public License along
43+
# with this program. If not, see <http://www.gnu.org/licenses/>.
44+
#
45+
# As a special exception, the respective Autoconf Macro's copyright owner
46+
# gives unlimited permission to copy, distribute and modify the configure
47+
# scripts that are the output of Autoconf when processing the Macro. You
48+
# need not follow the terms of the GNU General Public License when using
49+
# or distributing such scripts, even though portions of the text of the
50+
# Macro appear in them. The GNU General Public License (GPL) does govern
51+
# all other use of the material that constitutes the Autoconf Macro.
52+
#
53+
# This special exception to the GPL applies to versions of the Autoconf
54+
# Macro released by the Autoconf Archive. When you make and distribute a
55+
# modified version of the Autoconf Macro, you may extend this special
56+
# exception to the GPL to apply to your modified version as well.
57+
58+
#serial 3
59+
60+
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
61+
[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
62+
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
63+
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
64+
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
65+
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
66+
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
67+
[AS_VAR_SET(CACHEVAR,[yes])],
68+
[AS_VAR_SET(CACHEVAR,[no])])
69+
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
70+
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
71+
[m4_default([$2], :)],
72+
[m4_default([$3], :)])
73+
AS_VAR_POPDEF([CACHEVAR])dnl
74+
])dnl AX_CHECK_COMPILE_FLAGS

m4/ax_check_link_flag.m4

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# ===========================================================================
2+
# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
8+
#
9+
# DESCRIPTION
10+
#
11+
# Check whether the given FLAG works with the linker or gives an error.
12+
# (Warnings, however, are ignored)
13+
#
14+
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
15+
# success/failure.
16+
#
17+
# If EXTRA-FLAGS is defined, it is added to the linker's default flags
18+
# when the check is done. The check is thus made with the flags: "LDFLAGS
19+
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
20+
# issue an error when a bad flag is given.
21+
#
22+
# INPUT gives an alternative input source to AC_LINK_IFELSE.
23+
#
24+
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
25+
# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
26+
#
27+
# LICENSE
28+
#
29+
# Copyright (c) 2008 Guido U. Draheim <[email protected]>
30+
# Copyright (c) 2011 Maarten Bosmans <[email protected]>
31+
#
32+
# This program is free software: you can redistribute it and/or modify it
33+
# under the terms of the GNU General Public License as published by the
34+
# Free Software Foundation, either version 3 of the License, or (at your
35+
# option) any later version.
36+
#
37+
# This program is distributed in the hope that it will be useful, but
38+
# WITHOUT ANY WARRANTY; without even the implied warranty of
39+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
40+
# Public License for more details.
41+
#
42+
# You should have received a copy of the GNU General Public License along
43+
# with this program. If not, see <http://www.gnu.org/licenses/>.
44+
#
45+
# As a special exception, the respective Autoconf Macro's copyright owner
46+
# gives unlimited permission to copy, distribute and modify the configure
47+
# scripts that are the output of Autoconf when processing the Macro. You
48+
# need not follow the terms of the GNU General Public License when using
49+
# or distributing such scripts, even though portions of the text of the
50+
# Macro appear in them. The GNU General Public License (GPL) does govern
51+
# all other use of the material that constitutes the Autoconf Macro.
52+
#
53+
# This special exception to the GPL applies to versions of the Autoconf
54+
# Macro released by the Autoconf Archive. When you make and distribute a
55+
# modified version of the Autoconf Macro, you may extend this special
56+
# exception to the GPL to apply to your modified version as well.
57+
58+
#serial 3
59+
60+
AC_DEFUN([AX_CHECK_LINK_FLAG],
61+
[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
62+
AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
63+
ax_check_save_flags=$LDFLAGS
64+
LDFLAGS="$LDFLAGS $4 $1"
65+
AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
66+
[AS_VAR_SET(CACHEVAR,[yes])],
67+
[AS_VAR_SET(CACHEVAR,[no])])
68+
LDFLAGS=$ax_check_save_flags])
69+
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
70+
[m4_default([$2], :)],
71+
[m4_default([$3], :)])
72+
AS_VAR_POPDEF([CACHEVAR])dnl
73+
])dnl AX_CHECK_LINK_FLAGS

m4/ax_require_defined.m4

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# ===========================================================================
2+
# http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_REQUIRE_DEFINED(MACRO)
8+
#
9+
# DESCRIPTION
10+
#
11+
# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
12+
# been defined and thus are available for use. This avoids random issues
13+
# where a macro isn't expanded. Instead the configure script emits a
14+
# non-fatal:
15+
#
16+
# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
17+
#
18+
# It's like AC_REQUIRE except it doesn't expand the required macro.
19+
#
20+
# Here's an example:
21+
#
22+
# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
23+
#
24+
# LICENSE
25+
#
26+
# Copyright (c) 2014 Mike Frysinger <[email protected]>
27+
#
28+
# Copying and distribution of this file, with or without modification, are
29+
# permitted in any medium without royalty provided the copyright notice
30+
# and this notice are preserved. This file is offered as-is, without any
31+
# warranty.
32+
33+
#serial 1
34+
35+
AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
36+
m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
37+
])dnl AX_REQUIRE_DEFINED

0 commit comments

Comments
 (0)