nfs: fix xattr inode op pointers when disabled
authorChristoph Hellwig <hch@infradead.org>
Thu, 30 Jan 2014 14:01:52 +0000 (06:01 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 30 Jan 2014 17:37:49 +0000 (09:37 -0800)
Chris Mason reported a NULL pointer derefernence in generic_getxattr()
that was due to sb->s_xattr being NULL.

The reason is that the nfs #ifdef's for ACL support were misplaced, and
the nfs3 inode operations had the xattr operation pointers set up, even
though xattrs were not actually supported.  As a result, the xattr code
was being called without the infrastructure having been set up.

Move the #ifdef's appropriately.

Reported-and-tested-by: Chris Mason <clm@fb.com>
Acked-by: Al Viro viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/nfs/nfs3proc.c

index d2255d7..aa9bc97 100644 (file)
@@ -924,11 +924,11 @@ static const struct inode_operations nfs3_dir_inode_operations = {
        .permission     = nfs_permission,
        .getattr        = nfs_getattr,
        .setattr        = nfs_setattr,
+#ifdef CONFIG_NFS_V3_ACL
        .listxattr      = generic_listxattr,
        .getxattr       = generic_getxattr,
        .setxattr       = generic_setxattr,
        .removexattr    = generic_removexattr,
-#ifdef CONFIG_NFS_V3_ACL
        .get_acl        = nfs3_get_acl,
        .set_acl        = nfs3_set_acl,
 #endif
@@ -938,11 +938,11 @@ static const struct inode_operations nfs3_file_inode_operations = {
        .permission     = nfs_permission,
        .getattr        = nfs_getattr,
        .setattr        = nfs_setattr,
+#ifdef CONFIG_NFS_V3_ACL
        .listxattr      = generic_listxattr,
        .getxattr       = generic_getxattr,
        .setxattr       = generic_setxattr,
        .removexattr    = generic_removexattr,
-#ifdef CONFIG_NFS_V3_ACL
        .get_acl        = nfs3_get_acl,
        .set_acl        = nfs3_set_acl,
 #endif