+++ /dev/null
-dnl #
-dnl # grsecurity API change,
-dnl # kmem_cache_create() with SLAB_USERCOPY flag replaced by
-dnl # kmem_cache_create_usercopy().
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_SRC_KMEM_CACHE_CREATE_USERCOPY], [
- ZFS_LINUX_TEST_SRC([kmem_cache_create_usercopy], [
- #include <linux/slab.h>
- static void ctor(void *foo) { /* fake ctor */ }
- ],[
- struct kmem_cache *skc_linux_cache;
- const char *name = "test";
- size_t size = 4096;
- size_t align = 8;
- unsigned long flags = 0;
- size_t useroffset = 0;
- size_t usersize = size - useroffset;
-
- skc_linux_cache = kmem_cache_create_usercopy(
- name, size, align, flags, useroffset, usersize, ctor);
- ])
-])
-
-AC_DEFUN([ZFS_AC_KERNEL_KMEM_CACHE_CREATE_USERCOPY], [
- AC_MSG_CHECKING([whether kmem_cache_create_usercopy() exists])
- ZFS_LINUX_TEST_RESULT([kmem_cache_create_usercopy], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KMEM_CACHE_CREATE_USERCOPY, 1,
- [kmem_cache_create_usercopy() exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-AC_DEFUN([ZFS_AC_KERNEL_SRC_KMEM_CACHE], [
- ZFS_AC_KERNEL_SRC_KMEM_CACHE_CREATE_USERCOPY
-])
-
-AC_DEFUN([ZFS_AC_KERNEL_KMEM_CACHE], [
- ZFS_AC_KERNEL_KMEM_CACHE_CREATE_USERCOPY
-])
ZFS_AC_KERNEL_SRC_GENERIC_FADVISE
ZFS_AC_KERNEL_SRC_SCHED
ZFS_AC_KERNEL_SRC_USLEEP_RANGE
- ZFS_AC_KERNEL_SRC_KMEM_CACHE
ZFS_AC_KERNEL_SRC_KVMALLOC
ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL
ZFS_AC_KERNEL_SRC_WAIT
ZFS_AC_KERNEL_GENERIC_FADVISE
ZFS_AC_KERNEL_SCHED
ZFS_AC_KERNEL_USLEEP_RANGE
- ZFS_AC_KERNEL_KMEM_CACHE
ZFS_AC_KERNEL_KVMALLOC
ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL
ZFS_AC_KERNEL_WAIT
if (skc->skc_flags & KMC_RECLAIMABLE)
slabflags |= SLAB_RECLAIM_ACCOUNT;
-#if defined(SLAB_USERCOPY)
- /*
- * Required for PAX-enabled kernels if the slab is to be
- * used for copying between user and kernel space.
- */
- slabflags |= SLAB_USERCOPY;
-#endif
-
-#if defined(HAVE_KMEM_CACHE_CREATE_USERCOPY)
- /*
- * Newer grsec patchset uses kmem_cache_create_usercopy()
- * instead of SLAB_USERCOPY flag
- */
skc->skc_linux_cache = kmem_cache_create_usercopy(
skc->skc_name, size, align, slabflags, 0, size, NULL);
-#else
- skc->skc_linux_cache = kmem_cache_create(
- skc->skc_name, size, align, slabflags, NULL);
-#endif
if (skc->skc_linux_cache == NULL)
goto out;
}