diff options
author | Daniel J Blueman <daniel.blueman@gmail.com> | 2011-05-03 18:44:13 +0200 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-05-14 22:10:18 +0200 |
commit | f5de93914983bf04b92a786d1d205286fc53b49b (patch) | |
tree | 88801bc318e62bdd34698ca7cf5029b16570d1b7 /fs/btrfs/acl.c | |
parent | Btrfs: cleanup error handling in inode.c (diff) | |
download | linux-f5de93914983bf04b92a786d1d205286fc53b49b.tar.xz linux-f5de93914983bf04b92a786d1d205286fc53b49b.zip |
Prevent oopsing in posix_acl_valid()
If posix_acl_from_xattr() returns an error code, a negative address is
dereferenced causing an oops; fix by checking for error code first.
Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com>
Reviewed-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to '')
-rw-r--r-- | fs/btrfs/acl.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index a892bc27f13a..827be9a6ca33 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c @@ -178,12 +178,13 @@ static int btrfs_xattr_acl_set(struct dentry *dentry, const char *name, if (value) { acl = posix_acl_from_xattr(value, size); + if (IS_ERR(acl)) + return PTR_ERR(acl); + if (acl) { ret = posix_acl_valid(acl); if (ret) goto out; - } else if (IS_ERR(acl)) { - return PTR_ERR(acl); } } |