Commit 6cb4aff0a77cc0e6bae9475d62205319e3ebbf3f
Committed by
Linus Torvalds
1 parent
298359c5bf
Exists in
master
and in
7 other branches
reiserfs: fix oops while creating privroot with selinux enabled
Commit 57fe60df ("reiserfs: add atomic addition of selinux attributes during inode creation") contains a bug that will cause it to oops when mounting a file system that didn't previously contain extended attributes on a system using security.* xattrs. The issue is that while creating the privroot during mount reiserfs_security_init calls reiserfs_xattr_jcreate_nblocks which dereferences the xattr root. The xattr root doesn't exist, so we get an oops. Addresses http://bugzilla.kernel.org/show_bug.cgi?id=15309 Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 6 additions and 1 deletions Side-by-side Diff
fs/reiserfs/xattr_security.c
... | ... | @@ -76,7 +76,7 @@ |
76 | 76 | return error; |
77 | 77 | } |
78 | 78 | |
79 | - if (sec->length) { | |
79 | + if (sec->length && reiserfs_xattrs_initialized(inode->i_sb)) { | |
80 | 80 | blocks = reiserfs_xattr_jcreate_nblocks(inode) + |
81 | 81 | reiserfs_xattr_nblocks(inode, sec->length); |
82 | 82 | /* We don't want to count the directories twice if we have |
include/linux/reiserfs_xattr.h
... | ... | @@ -70,6 +70,11 @@ |
70 | 70 | void reiserfs_security_free(struct reiserfs_security_handle *sec); |
71 | 71 | #endif |
72 | 72 | |
73 | +static inline int reiserfs_xattrs_initialized(struct super_block *sb) | |
74 | +{ | |
75 | + return REISERFS_SB(sb)->priv_root != NULL; | |
76 | +} | |
77 | + | |
73 | 78 | #define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header)) |
74 | 79 | static inline loff_t reiserfs_xattr_nblocks(struct inode *inode, loff_t size) |
75 | 80 | { |