diff options
author | Richard Yao <[email protected]> | 2012-07-19 18:37:56 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-07-20 12:31:45 -0700 |
commit | ed3fc80048f1d11f0b77382f5c378bb4c11787fd (patch) | |
tree | 363089eb1cec91423e29cf2076185b36b391afbd | |
parent | fc173c85892841c283aac4e5174d6d8762463062 (diff) |
Fix NULL pointer dereference on PaX/GRSecurity patched Linux 3.3 and later kernels
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 <[email protected]>
Signed-off-by: Richard Yao <[email protected]>
Closes #794
Closes #809
-rw-r--r-- | config/kernel-show-options.m4 | 9 | ||||
-rwxr-xr-x | configure | 18 |
2 files changed, 15 insertions, 12 deletions
diff --git a/config/kernel-show-options.m4 b/config/kernel-show-options.m4 index 1bddb0a7a..67d683c55 100644 --- a/config/kernel-show-options.m4 +++ b/config/kernel-show-options.m4 @@ -6,11 +6,12 @@ AC_DEFUN([ZFS_AC_KERNEL_SHOW_OPTIONS], [ 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, @@ -15280,14 +15280,15 @@ cat >>conftest.$ac_ext <<_ACEOF #include <linux/fs.h> + int show_options (struct seq_file * x, struct dentry * y) { return 0; }; + static struct super_operations sops __attribute__ ((unused)) = { + .show_options = show_options, + }; + int main (void) { - int (*show_options) (struct seq_file *, struct dentry *) = NULL; - struct super_operations sops __attribute__ ((unused)); - - sops.show_options = show_options; ; return 0; @@ -21807,14 +21808,15 @@ cat >>conftest.$ac_ext <<_ACEOF #include <linux/fs.h> + int show_options (struct seq_file * x, struct dentry * y) { return 0; }; + static struct super_operations sops __attribute__ ((unused)) = { + .show_options = show_options, + }; + int main (void) { - int (*show_options) (struct seq_file *, struct dentry *) = NULL; - struct super_operations sops __attribute__ ((unused)); - - sops.show_options = show_options; ; return 0; |