fredag 07 september 2012 18.52.11 skrev du: > On Fri, 7 Sep 2012, Magnus Granberg wrote: > > * Makefile.in Add > > -fno-stack-protector when > > > > needed for espf. > > Toplevel Makefile.in is a generated file. You need to patch Makefile.def > or Makefile.tpl and regenerate Makefile.in. > > I'm surprised this passes bootstrap, since I wouldn't expect bootstrap to > avoid -Wformat-security warnings, and all the previous patch submissions I > recall to avoid such warnings have been incorrect (you can't just change > error (msg) to error ("%s", msg) when the reason the code is written how > it is is that no-argument formats such as %< and %> may appear in msg and > need interpreting).
Have updated Makefile and configure patch and it bootstrap with --enable-werror did't have that enable last time. Have new changelog to. Thank you for the help. Gentoo Hardened Project Magnus Granberg 2012-09-10 Magnus Granberg <zo...@gentoo.org * configure.ac Add new configure options espf. * Makefile.tpl Add -fno-stack-protector when needed for espf. * configure Regenerated * Makefile.in Likewise. gcc/ * configure.ac Add new configure options espf. Add -Wno-format-security to warn flags. * configure Regenerated * config.in Regenerated * Makefile.in Add -fno-PIE when needed for espf. * config/gnu-user.h Define ESPF_GCC_PIE_SPEC, ESPF_GCC_SSP_SPEC, ESPF_CPP_UNIQUE_OPTIONS_SPEC, ESPF_DRIVER_SELF_SPECS and ESPF_EXTRA_SPECS. * config/i386/gnu-user64.h Define DRIVER_SELF_SPECS. * config/i386/gnu-user.h Add ESPF_EXTRA_SPECS to SUBTARGET_EXTRA_SPECS when needed. Define DRIVER_SELF_SPECS. * config/i386/i386.h Add ESPF_EXTRA_SPECS to SUBTARGET_EXTRA_SPECS when needed. * gcc.c Add espf_cpp_unique_options to cpp_unique_options when needed. * c-family/c-common.c Enable warn_format when espf is enable. * c-family/c-format.c Enable warn_format_security when needed by espf. libgcc/ * libgcc/Makefile.in Add -fno-PIE when needed for espf. libcpp/ * configure.ac Add -Wno-format-security to warn flags. * configure Regenerated * config.in Regenerated 2012-09-10 Magnus Granberg <zo...@gentoo.org> Kees Cook <k...@ubuntu.com> gcc/doc/ * invoke.texi Add notes to -Wformat, -Wformat-security, -O2, -fstack-protector, -fPIE and -pie for espf. * install.texi Add new configure options 2012-08-26 Magnus Granberg <zo...@gentoo.org> Kees Cook <k...@ubuntu.com> gcc/testsuite * gcc.dg/charset/builtin2.c Add -Wno-format when effective_target is espf. * gcc.dg/format/format.exp Likewise. * gcc.dg/pr30473.c Likewise. * gcc.dg/pr38902.c Likewise. * gcc.dg/ipa/ipa-sra-1.c Likewise. * gcc.dg/torture/tls/tls-test.c Likewise. * g++.dg/abi/pragma-pack1.C Likewise. * g++.dg/cpp0x/constexpr-tuple.C Likewise. * lib/target-supports.exp Add check_effective_target_espf. * gcc.c-torture/execute/memset-1.x New file * gcc.c-torture/execute/vprintf-chk-1.x Likewise. * gcc.c-torture/execute/vfprintf-chk-1.x Likewise. * gcc.dg/stack-usage-1.c Add -fno-stack-protector when effective_target is espf. * gcc.dg/superblock.c Likewise. * gcc.dg/20021014-1.c Add -fno-PIE when effective_target is espf. * gcc.dg/nest.c Likewise. * gcc.dg/nested-func-4.c Likewise. * gcc.dg/pr32450.c Likewise. * gcc.dg/pr43643.c Likewise. * g++.dg/other/anon5.C Likewise. * g++.old-deja/g++.law/profile1.C Likewise. * gcc.dg/tree-ssa/ssa-store-ccp-3.c Skip the test. 2012-08-27 Magnus Granberg <zo...@gentoo.org> Kees Cook <k...@ubuntu.com> gcc/testsuite/ PR 39537 * g++.dg/ext/align1.C Remove printf * g++.old-deja/g++.law/operators28.C Fix format-string/type. * gcc.dg/torture/matrix-2.c Likewise. * gcc.dg/packed-vla.c Likewise. * g++.dg/opt/alias2.C Likewise. * g++.old-deja/g++.abi/vbase1.C Likewise. * g++.old-deja/g++.brendan/template8.C Likewise. * g++.old-deja/g++.eh/ptr1.C Likewise. * g++.old-deja/g++.jason/access23.C Likewise. * g++.old-deja/g++.law/cvt8.C Likewise. * g++.old-deja/g++.mike/net35.C Likewise. * g++.old-deja/g++.mike/offset1.C Likewise. * g++.old-deja/g++.mike/p12306.C Likewise. * g++.old-deja/g++.mike/p3579.C Likewise. * g++.old-deja/g++.mike/p3708a.C Likewise. * g++.old-deja/g++.mike/p3708b.C Likewise. * g++.old-deja/g++.mike/p3708.C Likewise. * g++.old-deja/g++.mike/p646.C Likewise. * g++.old-deja/g++.mike/p710.C Likewise. * g++.old-deja/g++.mike/p789a.C Likewise. * g++.old-deja/g++.mike/pmf2.C Likewise. * g++.old-deja/g++.mike/temp.C Likewise. * g++.old-deja/g++.other/temporary1.C Likewise. * g++.old-deja/g++.other/virtual8.C Likewise. * g++.old-deja/g++.pt/memtemp23.C Likewise. * g++.old-deja/g++.pt/memtemp24.C Likewise. * g++.old-deja/g++.pt/memtemp25.C Likewise. * g++.old-deja/g++.pt/memtemp26.C Likewise. * g++.old-deja/g++.pt/t39.C Likewise. * g++.old-deja/g++.robertl/eb17.C Likewise.
--- a/configure.ac 2012-02-02 11:20:32.000000000 +0100 +++ b/configure.ac 2012-07-01 00:44:27.845218414 +0200 @@ -424,6 +424,36 @@ AC_ARG_ENABLE(libssp, ENABLE_LIBSSP=$enableval, ENABLE_LIBSSP=yes) +# Check whether --enable-espf was given and target have the support. +AC_ARG_ENABLE([espf], +[AS_HELP_STRING([--enable-espf[=ARG]], + [Enable Stack protector, Position independent executable and + Fortify_source as default. If we have suppot for it when compiling. + Linux targets supported i?86 and x86_64. + @<:@ARG={all,pie,ssp,no}@:>@ ])], +set_enable_espf=$enableval, +set_enable_espf=no) +case "${set_enable_espf}" in + all|pie|ssp) + case $target in + i?86*-*-linux* | x86_64*-*-linux*) + enable_espf=yes + ;; + *) + enable_espf=no + AC_MSG_WARN([*** --enable-espf is not supported on this $target target.]) + ;; + esac + ;; + no) + enable_espf=no + ;; + *) + AC_MSG_ERROR([invalid --enable-espf argument]) + ;; +esac +AC_SUBST([enable_espf]) + # Save it here so that, even in case of --enable-libgcj, if the Java # front-end isn't enabled, we still get libgcj disabled. libgcj_saved=$libgcj @@ -3213,6 +3242,11 @@ if test "$GCC" = yes -a "$ENABLE_BUILD_W CFLAGS="$saved_CFLAGS" fi +# Disable -fstack-protector on stage1 +if test x$enable_espf = xyes; then + stage1_cflags="$stage1_cflags -fno-stack-protector" +fi + AC_SUBST(stage1_cflags) # Enable --enable-checking in stage1 of the compiler. --- a/gcc/configure.ac 2012-02-22 12:27:45.000000000 +0100 +++ b/gcc/configure.ac 2012-07-01 00:43:14.054216215 +0200 @@ -342,7 +342,8 @@ GCC_STDINT_TYPES # So, we only use -pedantic if we can disable those warnings. ACX_PROG_CC_WARNING_OPTS( - m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual])), [loose_warn]) + m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual \ + -Wno-format-security])), [loose_warn]) ACX_PROG_CC_WARNING_OPTS( m4_quote(m4_do([-Wstrict-prototypes -Wmissing-prototypes])), [c_loose_warn]) @@ -5193,6 +5193,156 @@ if test x"${LINKER_HASH_STYLE}" != x; th [The linker hash style]) fi +# -------------- +# Espf checks +# -------------- + +# Check whether --enable-espf was given and target have the support. +AC_ARG_ENABLE([espf], +[AS_HELP_STRING([--enable-espf[=ARG]], + [Enable Stack protector, Position independent executable and + Fortify_source as default. If we have suppot for it when compiling. + Linux targets supported i?86 and x86_64. + @<:@ARG={all,pie,ssp,no}@:>@ ])], +set_enable_espf=$enableval, +set_enable_espf=no) +case "${set_enable_espf}" in + all|pie|ssp) + AC_MSG_CHECKING(if $target support espf) + case $target in + i?86*-*-linux* | x86_64*-*-linux*) + enable_espf=yes + AC_DEFINE(ENABLE_ESPF, 1, + [Define if your target support espf and you have enable it.]) + ;; + *) + enable_espf=no + AC_MSG_WARN([*** --enable-espf is not supported on this $target target.]) + ;; + esac + AC_MSG_RESULT($enable_espf) + ;; + no) + enable_espf=no + ;; + *) + AC_MSG_ERROR([invalid --enable-espf argument]) + ;; +esac +AC_SUBST([enable_espf]) +if test x$enable_espf = xyes ; then + +# Check for FORTIFY_SOURCE support in target C library. + AC_CACHE_CHECK(for _FORTIFY_SOURCE support in target C library, + gcc_cv_libc_provides_fortify, + [gcc_cv_libc_provides_fortify=no + case "$target" in + *-*-linux*) + [# glibc 2.8 and later provides _FORTIFY_SOURCE. + # uClibc 0.9.32 and later provides _FORTIFY_SOURCE. + if test -f $target_header_dir/features.h; then + if $EGREP '^[ ]*#[ ]*define[ ]+__GLIBC__[ ]+2' \ + $target_header_dir/features.h > /dev/null \ + && $EGREP '^[ ]*#[ ]*define[ ]+__GLIBC_MINOR__[ ]+([1-9][0-9]|[8-9])' \ + $target_header_dir/features.h > /dev/null; then + gcc_cv_libc_provides_fortify=yes + elif $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC__[ ]+1' \ + $target_header_dir/features.h > /dev/null; then + if test -f $target_header_dir/bits/uClibc_config.h && \ + $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC_SUBLEVEL__[ ]+([3-9][2-9]|[4-9][0-9])' \ + $target_header_dir/bits/uClibc_config.h > /dev/null; then + gcc_cv_libc_provides_fortify=yes + else + gcc_cv_libc_provides_fortify=no + fi + fi + fi] + ;; + *) gcc_cv_libc_provides_fortify=no ;; + esac]) + + AC_MSG_CHECKING(if we can default to use -fPIE and link with -pie) + enable_espf_pie=no + if test x$gcc_cv_ld_pie = xyes ;then + if test x$set_enable_espf = xall || test x$set_enable_espf = xpie; then + saved_LDFLAGS="$LDFLAGS" + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fPIE -Werror" + LDFLAGS="$LDFLAGS -fPIE -pie" + AC_TRY_LINK(,, + [AC_MSG_RESULT([yes]); enable_espf_pie=yes],) + LDFLAGS="$saved_LDFLAGS" + CFLAGS="$saved_CFLAGS" + fi + fi + if test x$enable_espf_pie = xyes ; then + AC_DEFINE(ENABLE_ESPF_PIE, 1, + [Define if your compiler will default to use -fPIE and link with -pie.]) + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING(if we can default to use -fstack-protector) + ssp_link_test=no + enable_espf_ssp=no + if test x$gcc_cv_libc_provides_ssp = xyes && test x$set_have_as_tls = xyes; then + if $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC__[ ]+1' \ + $target_header_dir/features.h > /dev/null; then + if test -f $target_header_dir/bits/uClibc_config.h && \ + $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC_SUBLEVEL__[ ]+([3-9][2-9]|[4-9][0-9])' \ + $target_header_dir/bits/uClibc_config.h > /dev/null && \ + $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC_HAS_TLS__[ ]+1' \ + $target_header_dir/bits/uClibc_config.h > /dev/null; then + ssp_link_test=yes + fi + else + ssp_link_test=yes + fi + fi + if test x$ssp_link_test=xyes; then + if test x$set_enable_espf = xall || test x$set_enable_espf = xssp; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -O2 -fstack-protector -Werror" + AC_TRY_LINK(,, + [AC_MSG_RESULT([yes]); enable_espf_ssp=yes],) + CFLAGS="$saved_CFLAGS" + fi + fi + if test x$enable_espf_ssp = xyes ; then + AC_DEFINE(ENABLE_ESPF_SSP, 1, + [Define if your compiler will default to use -fstack-protector.]) + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING(if we can default to use -D_FORTIFY_SOURCE=2) + if test x$gcc_cv_libc_provides_fortify = xyes; then + saved_CFLAGS="$CFLAGS" + saved_CPPFLAGS="$CPPFLAGS" + CFLAGS="$CFLAGS -O2 -Werror" + CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2" + AC_TRY_LINK([ + #include <sys/types.h> + #include <sys/stat.h> + #include <fcntl.h> + ],[ + open ("/tmp/foo", O_WRONLY | O_CREAT); + ], + [AC_MSG_RESULT([no]); enable_espf_fortify=no], + [AC_MSG_RESULT([yes]); enable_espf_fortify=yes]) + CFLAGS="$saved_CFLAGS" + CPPFLAGS="$saved_CPPFLAGS" + else + AC_MSG_RESULT([no]) + enable_espf_fortify=no + fi + if test x$enable_espf_fortify = xyes ; then + AC_DEFINE(ENABLE_ESPF_FORTIFY, 1, + [Define if your compiler will default to use -D_FORTIFY_SOURCE=2.]) + fi + +fi + # Configure the subdirectories # AC_CONFIG_SUBDIRS($subdirs) --- a/libcpp/configure.ac 2012-02-14 11:02:21.000000000 +0100 +++ b/libcpp/configure.ac 2012-09-10 01:27:54.618064325 +0200 @@ -34,7 +34,7 @@ AC_CHECK_PROGS([AUTOHEADER], [autoheader # See config/warnings.m4 for details. ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wno-narrowing -Wwrite-strings \ - -Wmissing-format-attribute], [warn]) + -Wmissing-format-attribute -Wno-format-security], [warn]) ACX_PROG_CC_WARNING_OPTS([-Wstrict-prototypes -Wmissing-prototypes \ -Wold-style-definition -Wc++-compat], [c_warn]) ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long])
--- a/Makefile.tpl 2012-01-02 11:59:04.000000000 +0100 +++ b/Makefile.tpl 2012-06-29 00:11:30.886010145 +0200 @@ -362,9 +362,17 @@ WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@ BUILD_PREFIX = @BUILD_PREFIX@ BUILD_PREFIX_1 = @BUILD_PREFIX_1@ +# Disable SSP on BOOT_CFLAGS, LIBCFLAGS and LIBCXXFLAGS +enable_espf = @enable_espf@ +ifeq ($(enable_espf),yes) +ESPF_NOSSP_CFLAGS = -fno-stack-protector +else +ESPF_NOSSP_CFLAGS= +endif + # Flags to pass to stage2 and later makes. They are defined # here so that they can be overridden by Makefile fragments. -BOOT_CFLAGS= -g -O2 +BOOT_CFLAGS= -g -O2 $(ESPF_NOSSP_CFLAGS) BOOT_LDFLAGS= BOOT_ADAFLAGS=-gnatpg -gnata @@ -410,9 +418,9 @@ GNATMAKE = @GNATMAKE@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ -LIBCFLAGS = $(CFLAGS) +LIBCFLAGS = $(CFLAGS) $(ESPF_NOSSP_CFLAGS) CXXFLAGS = @CXXFLAGS@ -LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates +LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates $(ESPF_NOSSP_CFLAGS) GOCFLAGS = $(CFLAGS) TFLAGS = --- a/gcc/Makefile.in 2012-02-11 09:50:23.000000000 +0100 +++ b/gcc/Makefile.in 2012-06-29 00:07:45.230003420 +0200 @@ -973,14 +973,23 @@ LIBFUNCS_H = libfuncs.h $(HASHTAB_H) # cross compiler which does not use the native headers and libraries. INTERNAL_CFLAGS = -DIN_GCC @CROSS@ +# We don't want to compile the compiler with -fPIE, it make PCH fail. +enable_espf = @enable_espf@ +ifeq ($(enable_espf),yes) +ESPF_NOPIE_CFLAGS = -fno-PIE +else +ESPF_NOPIE_CFLAGS= +endif + # This is the variable actually used when we compile. If you change this, # you probably want to update BUILD_CFLAGS in configure.ac -ALL_CFLAGS = $(T_CFLAGS) $(CFLAGS-$@) \ +ALL_CFLAGS = $(ESPF_NOPIE_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) \ $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) @DEFS@ # The C++ version. -ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \ - $(COVERAGE_FLAGS) $(NOEXCEPTION_FLAGS) $(WARN_CXXFLAGS) @DEFS@ +ALL_CXXFLAGS =$(ESPF_NOPIE_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) \ + $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(NOEXCEPTION_FLAGS) \ + $(WARN_CXXFLAGS) @DEFS@ # Likewise. Put INCLUDES at the beginning: this way, if some autoconf macro # puts -I options in CPPFLAGS, our include files in the srcdir will always @@ -1815,6 +1824,7 @@ libgcc.mvars: config.status Makefile spe echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars + echo enable_espf = '$(enable_espf)' >> tmp-libgcc.mvars mv tmp-libgcc.mvars libgcc.mvars @@ -4893,6 +4903,9 @@ site.exp: ./config.status Makefile @if test "@enable_lto@" = "yes" ; then \ echo "set ENABLE_LTO 1" >> ./site.tmp; \ fi + @if test "@enable_espf@" = "yes" ; then \ + echo "set ENABLE_ESPF 1" >> ./site.tmp; \ + fi # If newlib has been configured, we need to pass -B to gcc so it can find # newlib's crt0.o if it exists. This will cause a "path prefix not used" # message if it doesn't, but the testsuite is supposed to ignore the message - --- a/libgcc/Makefile.in 2011-11-22 04:01:02.000000000 +0100 +++ b/libgcc/Makefile.in 2012-06-29 00:15:04.534016511 +0200 @@ -275,11 +275,16 @@ override CFLAGS := $(filter-out -fprofil INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ $(INCLUDES) @set_have_cc_tls@ @set_use_emutls@ +ifeq ($(enable_espf),yes) +ESPF_NOPIE_CFLAGS = -fno-PIE +else +ESPF_NOPIE_CFLAGS= +endif # Options to use when compiling crtbegin/end. CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ -finhibit-size-directive -fno-inline -fno-exceptions \ -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \ - -fno-stack-protector \ + -fno-stack-protector $(ESPF_NOPIE_CFLAGS) \ $(INHIBIT_LIBC_CFLAGS) # Extra flags to use when compiling crt{begin,end}.o.