diff options
author | Shi Weihua <shiwh@cn.fujitsu.com> | 2010-05-18 00:50:32 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-05 11:11:15 -0700 |
commit | 20dab696625a1eb15703d6d3db5bc3e7f8d9244b (patch) | |
tree | 57b3297934109b7bb1b4279779324e80fdbc7c60 | |
parent | a9689bca9259bee4a8a2fab77d551836fbc1701a (diff) |
Btrfs: should add a permission check for setfacl
commit 2f26afba46f0ebf155cf9be746496a0304a5b7cf upstream.
On btrfs, do the following
------------------
# su user1
# cd btrfs-part/
# touch aaa
# getfacl aaa
# file: aaa
# owner: user1
# group: user1
user::rw-
group::rw-
other::r--
# su user2
# cd btrfs-part/
# setfacl -m u::rwx aaa
# getfacl aaa
# file: aaa
# owner: user1
# group: user1
user::rwx <- successed to setfacl
group::rw-
other::r--
------------------
but we should prohibit it that user2 changing user1's acl.
In fact, on ext3 and other fs, a message occurs:
setfacl: aaa: Operation not permitted
This patch fixed it.
Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | fs/btrfs/acl.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index 361604244271..38ebe789b562 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c @@ -157,6 +157,9 @@ static int btrfs_xattr_set_acl(struct inode *inode, int type, int ret = 0; struct posix_acl *acl = NULL; + if (!is_owner_or_cap(inode)) + return -EPERM; + if (value) { acl = posix_acl_from_xattr(value, size); if (acl == NULL) { |