Support for PaX/GRSecurity patched kernels was developed against Linux
3.2. Unfortunately, an autotools check introduced for a Linux 3.3 API
fails on PaX/GRSecurity patched kernels. This causes the module to be
built against the Linux 3.2 ABI, which results in a NULL pointer
dereference at runtime.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
Closes #794
Closes #809
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
- ],[
- int (*show_options) (struct seq_file *, struct dentry *) = NULL;
- struct super_operations sops __attribute__ ((unused));
- sops.show_options = show_options;
+ int show_options (struct seq_file * x, struct dentry * y) { return 0; };
+ static struct super_operations sops __attribute__ ((unused)) = {
+ .show_options = show_options,
+ };
+ ],[
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_SHOW_OPTIONS_WITH_DENTRY, 1,
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_SHOW_OPTIONS_WITH_DENTRY, 1,
+ int show_options (struct seq_file * x, struct dentry * y) { return 0; };
+ static struct super_operations sops __attribute__ ((unused)) = {
+ .show_options = show_options,
+ };
+
- int (*show_options) (struct seq_file *, struct dentry *) = NULL;
- struct super_operations sops __attribute__ ((unused));
-
- sops.show_options = show_options;
+ int show_options (struct seq_file * x, struct dentry * y) { return 0; };
+ static struct super_operations sops __attribute__ ((unused)) = {
+ .show_options = show_options,
+ };
+
- int (*show_options) (struct seq_file *, struct dentry *) = NULL;
- struct super_operations sops __attribute__ ((unused));
-
- sops.show_options = show_options;