Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[firefly-linux-kernel-4.4.55.git] / fs / xattr.c
index 4be2e7666d02791bf26d2f8f6113e6000db1f0e3..f060663ab70c2b2c602aa7a7f4f8a343f621f5e4 100644 (file)
@@ -91,7 +91,11 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
 {
        struct inode *inode = dentry->d_inode;
        int error = -EOPNOTSUPP;
+       int issec = !strncmp(name, XATTR_SECURITY_PREFIX,
+                                  XATTR_SECURITY_PREFIX_LEN);
 
+       if (issec)
+               inode->i_flags &= ~S_NOSEC;
        if (inode->i_op->setxattr) {
                error = inode->i_op->setxattr(dentry, name, value, size, flags);
                if (!error) {
@@ -99,8 +103,7 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
                        security_inode_post_setxattr(dentry, name, value,
                                                     size, flags);
                }
-       } else if (!strncmp(name, XATTR_SECURITY_PREFIX,
-                               XATTR_SECURITY_PREFIX_LEN)) {
+       } else if (issec) {
                const char *suffix = name + XATTR_SECURITY_PREFIX_LEN;
                error = security_inode_setsecurity(inode, suffix, value,
                                                   size, flags);