Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfbffc39 authored by Tsutomu Itoh's avatar Tsutomu Itoh Committed by David Sterba
Browse files

Btrfs: fix return value of btrfs_get_acl()



In btrfs_get_acl(), when the second __btrfs_getxattr() call fails,
acl is not correctly set.
Therefore, a wrong value might return to the caller.

Signed-off-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
parent 10b2f34d
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -59,22 +59,19 @@ struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
		if (!value)
			return ERR_PTR(-ENOMEM);
		size = __btrfs_getxattr(inode, name, value, size);
	}
	if (size > 0) {
		acl = posix_acl_from_xattr(value, size);
			if (IS_ERR(acl)) {
				kfree(value);
				return acl;
			}
			set_cached_acl(inode, type, acl);
		}
		kfree(value);
	} else if (size == -ENOENT || size == -ENODATA || size == 0) {
		/* FIXME, who returns -ENOENT?  I think nobody */
		acl = NULL;
		set_cached_acl(inode, type, acl);
	} else {
		acl = ERR_PTR(-EIO);
	}
	kfree(value);

	if (!IS_ERR(acl))
		set_cached_acl(inode, type, acl);

	return acl;
}