Btrfs: prohibit a operation of changing acl's mask when noacl mount option used
authorShi Weihua <shiwh@cn.fujitsu.com>
Tue, 18 May 2010 00:51:54 +0000 (00:51 +0000)
committerChris Mason <chris.mason@oracle.com>
Fri, 11 Jun 2010 19:57:38 +0000 (15:57 -0400)
when used Posix File System Test Suite(pjd-fstest) to test btrfs,
some cases about setfacl failed when noacl mount option used.
I simplified used commands in pjd-fstest, and the following steps
can reproduce it.
------------------------
# cd btrfs-part/
# mkdir aaa
# setfacl -m m::rw aaa    <- successed, but not expected by pjd-fstest.
------------------------
I checked ext3, a warning message occured, like as:
  setfacl: aaa/: Operation not supported
Certainly, it's expected by pjd-fstest.

So, i compared acl.c of btrfs and ext3. Based on that, a patch created.
Fortunately, it works.

Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/acl.c

index 6b4d0cca5c7f03d7a747ec6352ce2838e009a3f9..a372985b3a9a2a7b31115d95258d3f4b1609af70 100644 (file)
@@ -163,6 +163,9 @@ static int btrfs_xattr_acl_set(struct dentry *dentry, const char *name,
        if (!is_owner_or_cap(dentry->d_inode))
                return -EPERM;
 
+       if (!IS_POSIXACL(dentry->d_inode))
+               return -EOPNOTSUPP;
+
        if (value) {
                acl = posix_acl_from_xattr(value, size);
                if (acl == NULL) {