Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support -fsanitizer=address on ztest #6884

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
6 changes: 4 additions & 2 deletions module/zfs/spa.c
Original file line number Diff line number Diff line change
Expand Up @@ -1563,7 +1563,7 @@ spa_load_spares(spa_t *spa)
static void
spa_load_l2cache(spa_t *spa)
{
nvlist_t **l2cache;
nvlist_t **l2cache = NULL;
uint_t nl2cache;
int i, j, oldnvdevs;
uint64_t guid;
Expand Down Expand Up @@ -1647,7 +1647,9 @@ spa_load_l2cache(spa_t *spa)
VERIFY(nvlist_remove(sav->sav_config, ZPOOL_CONFIG_L2CACHE,
DATA_TYPE_NVLIST_ARRAY) == 0);

l2cache = kmem_alloc(sav->sav_count * sizeof (void *), KM_SLEEP);
if (sav->sav_count > 0)
l2cache = kmem_alloc(sav->sav_count * sizeof (void *),
KM_SLEEP);
for (i = 0; i < sav->sav_count; i++)
l2cache[i] = vdev_config_generate(spa,
sav->sav_vdevs[i], B_TRUE, VDEV_CONFIG_L2CACHE);
Expand Down