When checking for stack protector support we need to actually link the test program. Backported from upstream: http://www.sudo.ws/repos/sudo/rev/ab4f94aac7de Signed-off-by: Vicente Olivert Riera # HG changeset patch # User Todd C. Miller # Date 1446216562 21600 # Node ID ab4f94aac7de73efa1b201890354c74126baf7ca # Parent e6bc59225c06c5d45580197519a73e3feea14cbd When checking for stack protector support we need to actually link the test program. diff -r e6bc59225c06 -r ab4f94aac7de configure --- a/configure Thu Oct 29 14:06:21 2015 -0600 +++ b/configure Fri Oct 30 08:49:22 2015 -0600 @@ -23922,11 +23922,17 @@ $as_echo_n "(cached) " >&6 else - sudo_cv_var_stack_protector=no + # Avoid using CFLAGS since the compiler might optimize away our + # test. We don't want LIBS to interfere with the test but keep + # LDFLAGS as it may have an rpath needed to find the ssp lib. _CFLAGS="$CFLAGS" _LDFLAGS="$LDFLAGS" - CFLAGS="-fstack-protector-strong" - LDFLAGS="$_LDFLAGS -fstack-protector-strong" + _LIBS="$LIBS" + LIBS= + + sudo_cv_var_stack_protector="-fstack-protector-strong" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23940,14 +23946,13 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - sudo_cv_var_stack_protector="-fstack-protector-strong" - -else - - CFLAGS="-fstack-protector-all" - LDFLAGS="$_LDFLAGS -fstack-protector-all" +if ac_fn_c_try_link "$LINENO"; then : + +else + + sudo_cv_var_stack_protector="-fstack-protector-all" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23961,14 +23966,13 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - sudo_cv_var_stack_protector="-fstack-protector-all" - -else - - CFLAGS="-fstack-protector" - LDFLAGS="$_LDFLAGS -fstack-protector" +if ac_fn_c_try_link "$LINENO"; then : + +else + + sudo_cv_var_stack_protector="-fstack-protector" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23982,20 +23986,26 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - sudo_cv_var_stack_protector="-fstack-protector" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if ac_fn_c_try_link "$LINENO"; then : + +else + + sudo_cv_var_stack_protector=no + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$_CFLAGS" LDFLAGS="$_LDFLAGS" + LIBS="$_LIBS" fi diff -r e6bc59225c06 -r ab4f94aac7de configure.ac --- a/configure.ac Thu Oct 29 14:06:21 2015 -0600 +++ b/configure.ac Fri Oct 30 08:49:22 2015 -0600 @@ -3981,37 +3981,42 @@ AC_CACHE_CHECK([for compiler stack protector support], [sudo_cv_var_stack_protector], [ - sudo_cv_var_stack_protector=no + # Avoid using CFLAGS since the compiler might optimize away our + # test. We don't want LIBS to interfere with the test but keep + # LDFLAGS as it may have an rpath needed to find the ssp lib. _CFLAGS="$CFLAGS" _LDFLAGS="$LDFLAGS" - CFLAGS="-fstack-protector-strong" - LDFLAGS="$_LDFLAGS -fstack-protector-strong" - AC_COMPILE_IFELSE([ + _LIBS="$LIBS" + LIBS= + + sudo_cv_var_stack_protector="-fstack-protector-strong" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[char buf[1024]; buf[1023] = '\0';]]) - ], [ - sudo_cv_var_stack_protector="-fstack-protector-strong" - ], [ - CFLAGS="-fstack-protector-all" - LDFLAGS="$_LDFLAGS -fstack-protector-all" - AC_COMPILE_IFELSE([ + ], [], [ + sudo_cv_var_stack_protector="-fstack-protector-all" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[char buf[1024]; buf[1023] = '\0';]]) - ], [ - sudo_cv_var_stack_protector="-fstack-protector-all" - ], [ - CFLAGS="-fstack-protector" - LDFLAGS="$_LDFLAGS -fstack-protector" - AC_COMPILE_IFELSE([ + ], [], [ + sudo_cv_var_stack_protector="-fstack-protector" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[char buf[1024]; buf[1023] = '\0';]]) - ], [ - sudo_cv_var_stack_protector="-fstack-protector" - ], []) + ], [], [ + sudo_cv_var_stack_protector=no + ]) ]) ]) CFLAGS="$_CFLAGS" LDFLAGS="$_LDFLAGS" + LIBS="$_LIBS" ] ) if test X"$sudo_cv_var_stack_protector" != X"no"; then