]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Stop runtime pointer modifications in autotools checks
authorRichard Yao <ryao@gentoo.org>
Tue, 10 Sep 2013 19:13:44 +0000 (15:13 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 13 Sep 2013 20:30:55 +0000 (13:30 -0700)
c38367c73f592ca9729ba0d5e70b5e3bc67e0745 was meant to eliminate runtime
function pointer modifications in autotools checks because they were
prone to false negatives on kernels hardened by the PaX project.
Unfortunately, I missed the xattr_handler and super_block->s_bdi
autotools checks. Recent changes to PaX constified
xattr_handler->get/set, which lead me to discover this oversight.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1433

config/kernel-bdi.m4
config/kernel-xattr-handler.m4

index 34ffaabd5b5a703b6c119b349ea6bcb1fce753d0..aec7b734788879efc51d74f885bc8d89cdcba4bb 100644 (file)
@@ -6,9 +6,12 @@ AC_DEFUN([ZFS_AC_KERNEL_BDI], [
        AC_MSG_CHECKING([whether super_block has s_bdi])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/fs.h>
+
+               static const struct super_block
+                   sb __attribute__ ((unused)) {
+                       .s_bdi = NULL,
+               }
        ],[
-               struct super_block sb __attribute__ ((unused));
-               sb.s_bdi = NULL;
        ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_BDI, 1, [struct super_block has s_bdi])
index 325c960df6e476010cef315ad28651e36b5e0cd4..943f9033c34a4225033ae0d94a14bcb4f356881a 100644 (file)
@@ -18,10 +18,11 @@ AC_DEFUN([ZFS_AC_KERNEL_CONST_XATTR_HANDLER],
                const struct xattr_handler *xattr_handlers[] = {
                        &xattr_test_handler,
                };
-       ],[
-               struct super_block sb __attribute__ ((unused));
 
-               sb.s_xattr = xattr_handlers;
+               const struct super_block sb __attribute__ ((unused)) = {
+                       .s_xattr = xattr_handlers,
+               };
+       ],[
        ],[
                AC_MSG_RESULT([yes])
                AC_DEFINE(HAVE_CONST_XATTR_HANDLER, 1,
@@ -40,12 +41,14 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [
        AC_MSG_CHECKING([whether xattr_handler->get() wants dentry])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/xattr.h>
-       ],[
-               int (*get)(struct dentry *dentry, const char *name,
-                   void *buffer, size_t size, int handler_flags) = NULL;
-               struct xattr_handler xops __attribute__ ((unused));
 
-               xops.get = get;
+               int get(struct dentry *dentry, const char *name,
+                   void *buffer, size_t size, int handler_flags) { return 0; }
+               static const struct xattr_handler
+                   xops __attribute__ ((unused)) = {
+                       .get = get,
+               };
+       ],[
        ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_DENTRY_XATTR_GET, 1,
@@ -64,13 +67,15 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [
        AC_MSG_CHECKING([whether xattr_handler->set() wants dentry])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/xattr.h>
-       ],[
-               int (*set)(struct dentry *dentry, const char *name,
-                   const void *buffer, size_t size, int flags,
-                   int handler_flags) = NULL;
-               struct xattr_handler xops __attribute__ ((unused));
 
-               xops.set = set;
+               int set(struct dentry *dentry, const char *name,
+                   const void *buffer, size_t size, int flags,
+                   int handler_flags) { return 0; }
+               static const struct xattr_handler
+                   xops __attribute__ ((unused)) = {
+                       .set = set,
+               };
+       ],[
        ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_DENTRY_XATTR_SET, 1,