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 <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
Closes #794
Closes #809
This commit is contained in:
Richard Yao 2012-07-19 18:37:56 -04:00 committed by Brian Behlendorf
parent fc173c8589
commit ed3fc80048
2 changed files with 15 additions and 12 deletions

View File

@ -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,

18
configure vendored
View File

@ -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;