Add --disable-syscall.

This resolves #517.
This commit is contained in:
Jason Evans 2016-12-03 16:47:36 -08:00
parent 7179351a45
commit acb7b1f53e
5 changed files with 33 additions and 15 deletions

View File

@ -203,6 +203,11 @@ any of the following arguments (not a definitive list) to 'configure':
most extreme case increases physical memory usage for the 16 KiB size class most extreme case increases physical memory usage for the 16 KiB size class
to 20 KiB. to 20 KiB.
--disable-syscall
Disable use of syscall(2) rather than {open,read,write,close}(2). This is
intended as a workaround for systems that place security limitations on
syscall(2).
--with-xslroot=<path> --with-xslroot=<path>
Specify where to find DocBook XSL stylesheets when building the Specify where to find DocBook XSL stylesheets when building the
documentation. documentation.

View File

@ -1366,20 +1366,33 @@ if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME]) AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME])
fi fi
dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS X dnl Use syscall(2) (if available) by default.
dnl 10.12's deprecation warning prevents use. AC_ARG_ENABLE([syscall],
SAVED_CFLAGS="${CFLAGS}" [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])],
JE_CFLAGS_APPEND([-Werror]) [if test "x$enable_syscall" = "xno" ; then
JE_COMPILABLE([syscall(2)], [ enable_syscall="0"
else
enable_syscall="1"
fi
],
[enable_syscall="1"]
)
if test "x$enable_syscall" = "x1" ; then
dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS
dnl X 10.12's deprecation warning prevents use.
SAVED_CFLAGS="${CFLAGS}"
JE_CFLAGS_APPEND([-Werror])
JE_COMPILABLE([syscall(2)], [
#include <sys/syscall.h> #include <sys/syscall.h>
#include <unistd.h> #include <unistd.h>
], [ ], [
syscall(SYS_write, 2, "hello", 5); syscall(SYS_write, 2, "hello", 5);
], ],
[je_cv_syscall]) [je_cv_syscall])
CFLAGS="${SAVED_CFLAGS}" CFLAGS="${SAVED_CFLAGS}"
if test "x$je_cv_syscall" = "xyes" ; then if test "x$je_cv_syscall" = "xyes" ; then
AC_DEFINE([JEMALLOC_HAVE_SYSCALL], [ ]) AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ])
fi
fi fi
dnl Check if the GNU-specific secure_getenv function exists. dnl Check if the GNU-specific secure_getenv function exists.

View File

@ -66,8 +66,8 @@
*/ */
#undef JEMALLOC_OSSPIN #undef JEMALLOC_OSSPIN
/* Defined if syscall(2) is available. */ /* Defined if syscall(2) is usable. */
#undef JEMALLOC_HAVE_SYSCALL #undef JEMALLOC_USE_SYSCALL
/* /*
* Defined if secure_getenv(3) is available. * Defined if secure_getenv(3) is available.

View File

@ -219,7 +219,7 @@ os_overcommits_proc(void)
char buf[1]; char buf[1];
ssize_t nread; ssize_t nread;
#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_open) #if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_open)
fd = (int)syscall(SYS_open, "/proc/sys/vm/overcommit_memory", O_RDONLY); fd = (int)syscall(SYS_open, "/proc/sys/vm/overcommit_memory", O_RDONLY);
#else #else
fd = open("/proc/sys/vm/overcommit_memory", O_RDONLY); fd = open("/proc/sys/vm/overcommit_memory", O_RDONLY);
@ -227,13 +227,13 @@ os_overcommits_proc(void)
if (fd == -1) if (fd == -1)
return (false); /* Error. */ return (false); /* Error. */
#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_read) #if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_read)
nread = (ssize_t)syscall(SYS_read, fd, &buf, sizeof(buf)); nread = (ssize_t)syscall(SYS_read, fd, &buf, sizeof(buf));
#else #else
nread = read(fd, &buf, sizeof(buf)); nread = read(fd, &buf, sizeof(buf));
#endif #endif
#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_close) #if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_close)
syscall(SYS_close, fd); syscall(SYS_close, fd);
#else #else
close(fd); close(fd);

View File

@ -49,7 +49,7 @@ static void
wrtmessage(void *cbopaque, const char *s) wrtmessage(void *cbopaque, const char *s)
{ {
#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_write) #if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_write)
/* /*
* Use syscall(2) rather than write(2) when possible in order to avoid * Use syscall(2) rather than write(2) when possible in order to avoid
* the possibility of memory allocation within libc. This is necessary * the possibility of memory allocation within libc. This is necessary