aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2010-06-04 05:30:03 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2010-08-09 16:47:38 -0400
commitdb78b877f7744bec4a9d9f9e7d10da3931d7cd39 (patch)
treefd9ee2fbe0998218b6d90322f85b285887e6fe9d /fs/cifs
parent1025774ce411f2bd4b059ad7b53f0003569b74fa (diff)
always call inode_change_ok early in ->setattr
Make sure we call inode_change_ok before doing any changes in ->setattr, and make sure to call it even if our fs wants to ignore normal UNIX permissions, but use the ATTR_FORCE to skip those. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/cifs')
-rw-r--r--fs/cifs/inode.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index 9c6a40f5cc57..b95f4a5af013 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -1796,14 +1796,12 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
1796 1796
1797 xid = GetXid(); 1797 xid = GetXid();
1798 1798
1799 if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) == 0) { 1799 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
1800 /* check if we have permission to change attrs */ 1800 attrs->ia_valid |= ATTR_FORCE;
1801 rc = inode_change_ok(inode, attrs); 1801
1802 if (rc < 0) 1802 rc = inode_change_ok(inode, attrs);
1803 goto out; 1803 if (rc < 0)
1804 else 1804 goto out;
1805 rc = 0;
1806 }
1807 1805
1808 full_path = build_path_from_dentry(direntry); 1806 full_path = build_path_from_dentry(direntry);
1809 if (full_path == NULL) { 1807 if (full_path == NULL) {
@@ -1934,14 +1932,13 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
1934 cFYI(1, "setattr on file %s attrs->iavalid 0x%x", 1932 cFYI(1, "setattr on file %s attrs->iavalid 0x%x",
1935 direntry->d_name.name, attrs->ia_valid); 1933 direntry->d_name.name, attrs->ia_valid);
1936 1934
1937 if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) == 0) { 1935 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
1938 /* check if we have permission to change attrs */ 1936 attrs->ia_valid |= ATTR_FORCE;
1939 rc = inode_change_ok(inode, attrs); 1937
1940 if (rc < 0) { 1938 rc = inode_change_ok(inode, attrs);
1941 FreeXid(xid); 1939 if (rc < 0) {
1942 return rc; 1940 FreeXid(xid);
1943 } else 1941 return rc;
1944 rc = 0;
1945 } 1942 }
1946 1943
1947 full_path = build_path_from_dentry(direntry); 1944 full_path = build_path_from_dentry(direntry);