mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 01:51:00 +03:00
Remove NPTL_GUARD_WITHIN_STACK
Commit 4b2f65b253
increased the user
space stack by 4x to resolve certain stack overflows. As such it
no longer makes sense to worry about a single extra page which
might or might not be part of the process stack. There is now
ample headroom for normal usage.
By eliminating this configure check we are also resolving the
following segfault which intentionally occurs at configure time
and may be logged in dmesg.
conftest[22156]: segfault at 7fbf18a47e48 ip 00000000004007fe
sp 00007fbf18a4be50 error 6 in conftest[400000+1000]
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
9759c60f1a
commit
79c6e4c445
@ -1,56 +0,0 @@
|
||||
dnl #
|
||||
dnl # Check if the glibc NPTL threading implementation includes the guard area
|
||||
dnl # within the stack size allocation, rather than allocating extra space at
|
||||
dnl # the end of the stack, as POSIX.1 requires.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_USER_STACK_GUARD], [
|
||||
|
||||
AC_MSG_CHECKING([whether pthread stack includes guard])
|
||||
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
CFLAGS="-fstack-check"
|
||||
saved_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="-lpthread"
|
||||
|
||||
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
||||
[
|
||||
#include <pthread.h>
|
||||
#include <sys/resource.h>
|
||||
#include <unistd.h>
|
||||
#include <bits/local_lim.h>
|
||||
|
||||
#define PAGESIZE (sysconf(_SC_PAGESIZE))
|
||||
#define STACK_SIZE 8192
|
||||
#define BUFSIZE 4096
|
||||
|
||||
void * func(void *arg)
|
||||
{
|
||||
char buf[[BUFSIZE]];
|
||||
}
|
||||
],
|
||||
[
|
||||
pthread_t tid;
|
||||
pthread_attr_t attr;
|
||||
struct rlimit l;
|
||||
|
||||
l.rlim_cur = 0;
|
||||
l.rlim_max = 0;
|
||||
setrlimit(RLIMIT_CORE, &l);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + STACK_SIZE);
|
||||
pthread_attr_setguardsize(&attr, PAGESIZE);
|
||||
pthread_create(&tid, &attr, func, NULL);
|
||||
pthread_join(tid, NULL);
|
||||
])],
|
||||
[
|
||||
AC_MSG_RESULT([no])
|
||||
],
|
||||
[
|
||||
AC_DEFINE([NPTL_GUARD_WITHIN_STACK], 1,
|
||||
[Define to 1 if NPTL threading implementation includes
|
||||
guard area in stack allocation])
|
||||
AC_MSG_RESULT([yes])
|
||||
])
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
LDFLAGS="$saved_LDFLAGS"
|
||||
])
|
@ -10,5 +10,4 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||
ZFS_AC_CONFIG_USER_LIBBLKID
|
||||
ZFS_AC_CONFIG_USER_LIBSELINUX
|
||||
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
|
||||
ZFS_AC_CONFIG_USER_STACK_GUARD
|
||||
])
|
||||
|
@ -190,12 +190,6 @@ extern void vpanic(const char *, __va_list);
|
||||
#define STACK_SIZE 24576 /* Solaris */
|
||||
#endif
|
||||
|
||||
#ifdef NPTL_GUARD_WITHIN_STACK
|
||||
#define EXTRA_GUARD_BYTES PAGESIZE
|
||||
#else
|
||||
#define EXTRA_GUARD_BYTES 0
|
||||
#endif
|
||||
|
||||
/* in libzpool, p0 exists only to have its address taken */
|
||||
typedef struct proc {
|
||||
uintptr_t this_is_never_used_dont_dereference_it;
|
||||
|
@ -175,8 +175,7 @@ zk_thread_create(caddr_t stk, size_t stksize, thread_func_t func, void *arg,
|
||||
* on Linux.
|
||||
*/
|
||||
|
||||
stack = PTHREAD_STACK_MIN + MAX(stksize, STACK_SIZE) * 4 +
|
||||
EXTRA_GUARD_BYTES;
|
||||
stack = PTHREAD_STACK_MIN + MAX(stksize, STACK_SIZE) * 4;
|
||||
|
||||
VERIFY3S(pthread_attr_init(&attr), ==, 0);
|
||||
VERIFY3S(pthread_attr_setstacksize(&attr, stack), ==, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user