From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Detect and enable retpolines for all code, to mitigate Spectre v2 (branch target injection) on x86. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- configure.ac | 1 + include/builddefs.in | 7 +++++++ m4/package_libcdev.m4 | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/configure.ac b/configure.ac index d068ba0..2104219 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 df76b2c..fe05dc3 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 9258c27..5a7baa1 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) + ]) -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html