From: Darrick J. Wong Date: Fri, 9 Mar 2018 02:35:20 +0000 (-0600) Subject: misc: enable retpolines across all xfsprogs utilities X-Git-Tag: v4.16.0-rc1~62 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1b0adc71229ba8611b06abc2bffa03babba5157d;p=thirdparty%2Fxfsprogs-dev.git misc: enable retpolines across all xfsprogs utilities Detect and enable retpolines for all code, to mitigate Spectre v2 (branch target injection) on x86. Signed-off-by: Darrick J. Wong Reviewed-by: Eric Sandeen Signed-off-by: Eric Sandeen --- diff --git a/configure.ac b/configure.ac index 3a0ab184a..b0d26016d 100644 --- a/configure.ac +++ b/configure.ac @@ -206,6 +206,7 @@ if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.]) fi +AC_PACKAGE_CHECK_RETPOLINE AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) AC_TYPE_UMODE_T diff --git a/include/builddefs.in b/include/builddefs.in index df76b2c16..fe05dc376 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -176,6 +176,13 @@ endif SANITIZER_CFLAGS += @addrsan_cflags@ @threadsan_cflags@ @ubsan_cflags@ SANITIZER_LDFLAGS += @addrsan_ldflags@ @threadsan_ldflags@ @ubsan_ldflags@ +# Enable retpolines if available +HAVE_RETPOLINE = @have_retpoline@ +ifeq ($(HAVE_RETPOLINE),yes) +OPTIMIZER += @retpoline_cflags@ +LOADERFLAGS += @retpoline_ldflags@ +endif + GCFLAGS = $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include -I$(TOPDIR)/libxfs diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 index 9258c271f..5a7baa1e5 100644 --- a/m4/package_libcdev.m4 +++ b/m4/package_libcdev.m4 @@ -420,3 +420,25 @@ AC_DEFUN([AC_HAVE_HDIO_GETGEO], AC_MSG_RESULT(no)) AC_SUBST(have_hdio_getgeo) ]) + +AC_DEFUN([AC_PACKAGE_CHECK_RETPOLINE], + [ AC_MSG_CHECKING([if C compiler supports retpoline]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + RETPOLINE_FLAGS="-mindirect-branch=thunk" + CFLAGS="$CFLAGS $RETPOLINE_FLAGS" + LDFLAGS="$LDFLAGS $RETPOLINE_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [retpoline_cflags=$RETPOLINE_FLAGS] + [retpoline_ldflags=$RETPOLINE_FLAGS], + [AC_MSG_RESULT([no])]) + if test -n "$retpoline_cflags"; then + have_retpoline=yes + fi + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_retpoline) + AC_SUBST(retpoline_cflags) + AC_SUBST(retpoline_ldflags) + ])