]> granicus.if.org Git - zfs/commitdiff
Set stack frame limit
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 26 Jun 2010 06:07:09 +0000 (23:07 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Jun 2010 17:08:48 +0000 (10:08 -0700)
For all module/library functions ensure so stack frame exceeds 1024
bytes.  Ideally this should be set lower to say 512 bytes but there
are still numerous functions which exceed even this limit.  For now
this is set to 1024 to ensure we catch the worst offenders.

Additionally, set the limit for ztest to 1024 bytes since the idea
here is to catch stack issues in user space before we find them by
overrunning a kernel stack.  This should also be reduced to 512
bytes as soon as all the trouble makes are fixed.

Finally, add -fstack-check to gcc build options when --enable-debug
is specified at configure time.  This ensures that each page on the
stack will be touched and we will generate a segfault on stack
overflow.

Over time we can gradually fix the following functions:

536 zfs:dsl_deadlist_regenerate
536 zfs:dsl_load_sets
536 zfs:zil_parse
544 zfs:zfs_ioc_recv
552 zfs:dsl_deadlist_insert_bpobj
552 zfs:vdev_dtl_sync
584 zfs:copy_create_perms
608 zfs:ddt_class_contains
608 zfs:ddt_prefetch
608 zfs:__dprintf
616 zfs:ddt_lookup
648 zfs:dsl_scan_ddt
696 zfs:dsl_deadlist_merge
736 zfs:ddt_zap_walk
744 zfs:dsl_prop_get_all_impl
872 zfs:dnode_evict_dbufs

cmd/ztest/Makefile.am
config/zfs-build.m4
lib/libzpool/Makefile.am

index 8f5ab24932ec43668c728bbfb8a7e9743146af80..0573566e9e7f1ef0a37eed5c460a884fa56bc4b9 100644 (file)
@@ -1,5 +1,7 @@
 include $(top_srcdir)/config/Rules.am
 
+AM_CFLAGS += -Wframe-larger-than=1024
+
 DEFAULT_INCLUDES += \
        -I${top_srcdir}/lib/libspl/include \
        -I${top_srcdir}/lib/libefi/include \
index c83e11ce0f756e516f6b1b7536d227c575ab1c43..b5dac18e1ce8e00892386882dc76fedb6763fc22 100644 (file)
@@ -24,7 +24,7 @@ if test "$zfs_ac_debug" = yes; then
                [Define to 1 to enable debug tracing])
                KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG "
                HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG "
-               USERDEBUG="-DDEBUG"
+               USERDEBUG="-DDEBUG -fstack-check"
        else
                AC_MSG_RESULT([no])
                AC_DEFINE([NDEBUG], [1],
index e28d7304b4e95bb14be29e8ce2e35d0034f9fb47..7857820518c0290f995bd19d329f0b67f005f636 100644 (file)
@@ -1,5 +1,7 @@
 include $(top_srcdir)/config/Rules.am
 
+AM_CFLAGS += -Wframe-larger-than=1024
+
 SUBDIRS = include
 DEFAULT_INCLUDES += \
        -I${top_srcdir}/lib/libzpool/include \