Skip to content

Commit

Permalink
Support -fsanitize=address on ztest
Browse files Browse the repository at this point in the history
Requires minimum of gcc version 4.8. Only available to ztest
right now, but easily added to other user applications. For
kernel support use the Linux KASAN feature instead.

Signed-off-by: DHE <git@dehacked.net>
  • Loading branch information
DeHackEd committed Nov 29, 2017
1 parent 5f138ee commit 44617d9
Show file tree
Hide file tree
Showing 15 changed files with 76 additions and 31 deletions.
2 changes: 2 additions & 0 deletions cmd/zdb/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ include $(top_srcdir)/config/Rules.am

AM_CPPFLAGS += -DDEBUG

AM_CFLAGS += $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
-I$(top_srcdir)/lib/libspl/include
Expand Down
1 change: 1 addition & 0 deletions cmd/ztest/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ include $(top_srcdir)/config/Rules.am
# -Wnoformat-truncation to get rid of compiler warning for unchecked
# truncating snprintfs on gcc 7.1.1.
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(NO_FORMAT_TRUNCATION)
AM_CFLAGS += $(FSANITIZE_ADDRESS)
AM_CPPFLAGS += -DDEBUG -UNDEBUG

DEFAULT_INCLUDES += \
Expand Down
62 changes: 62 additions & 0 deletions config/user-compiler-options.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
dnl #
dnl # Check if gcc supports -fsanitize=address. Applies to all libraries,
dnl # ztest and zdb
dnl #
dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with
dnl # it will be linked successfully. CFLAGS will vary by binary being built.
dnl #
AC_DEFUN([ZFS_AC_CONFIG_USER_GCC_FSANITIZE], [
if test "$enable_debug" = "yes"
then
AC_MSG_CHECKING([for -fsanitize=address support])
saved_cflags="$CFLAGS"
saved_ldflags="$LDFLAGS"
CFLAGS="$CFLAGS -fsanitize=address"
LDFLAGS="$LDFLAGS -fsanitize=address"
AC_TRY_LINK(
[
#include <time.h>
],[
time_t now;
now = time(&now);
],[
FSANITIZE_ADDRESS=-fsanitize=address
saved_ldflags="$saved_ldflags -fsanitize=address"
AC_MSG_RESULT(yes)
],[
FSANITIZE_ADDRESS=""
AC_MSG_RESULT(no)
])
CFLAGS="$saved_flags"
LDFLAGS="$saved_ldflags"
fi
AC_SUBST([FSANITIZE_ADDRESS])
])


dnl #
dnl # Check if gcc supports -Wframe-larger-than=<size> option.
dnl #
AC_DEFUN([ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN], [
AC_MSG_CHECKING([for -Wframe-larger-than=<size> support])
saved_flags="$CFLAGS"
CFLAGS="$CFLAGS -Wframe-larger-than=4096"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
[
FRAME_LARGER_THAN=-Wframe-larger-than=4096
AC_MSG_RESULT([yes])
],
[
FRAME_LARGER_THAN=
AC_MSG_RESULT([no])
])
CFLAGS="$saved_flags"
AC_SUBST([FRAME_LARGER_THAN])
])

22 changes: 0 additions & 22 deletions config/user-frame-larger-than.m4

This file was deleted.

1 change: 1 addition & 0 deletions config/user.m4
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
ZFS_AC_CONFIG_USER_LIBUDEV
ZFS_AC_CONFIG_USER_LIBSSL
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
ZFS_AC_CONFIG_USER_GCC_FSANITIZE
ZFS_AC_CONFIG_USER_RUNSTATEDIR
ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
Expand Down
2 changes: 1 addition & 1 deletion config/zfs-build.m4
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ AC_DEFUN([ZFS_AC_DEBUG], [
AC_MSG_CHECKING([whether assertion support will be enabled])
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],
[Enable assertion support @<:@default=no@:>@])],
[Enable compiler and code assertions @<:@default=no@:>@])],
[],
[enable_debug=no])
Expand Down
2 changes: 1 addition & 1 deletion lib/libavl/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include $(top_srcdir)/config/Rules.am

VPATH = $(top_srcdir)/module/avl/

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libefi/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
include $(top_srcdir)/config/Rules.am

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libicp/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ VPATH = \
$(top_srcdir)/module/icp \
$(top_srcdir)/lib/libicp

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
1 change: 1 addition & 0 deletions lib/libnvpair/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ VPATH = \
$(top_srcdir)/lib/libnvpair

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS)
AM_CFLAGS += $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libspl/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ VPATH = \
$(top_srcdir)/lib/libspl \
$(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR)

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

SUBDIRS = include $(TARGET_ASM_DIR)
DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64
Expand Down
2 changes: 1 addition & 1 deletion lib/libtpool/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
include $(top_srcdir)/config/Rules.am

AM_CFLAGS += $(DEBUG_STACKFLAGS)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libunicode/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include $(top_srcdir)/config/Rules.am

VPATH = $(top_srcdir)/module/unicode

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libuutil/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
include $(top_srcdir)/config/Rules.am

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down
2 changes: 1 addition & 1 deletion lib/libzpool/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ VPATH = \
$(top_srcdir)/module/zcommon \
$(top_srcdir)/lib/libzpool

AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS)

DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
Expand Down

0 comments on commit 44617d9

Please sign in to comment.