eCryptfs: Copy up lower inode attrs after setting lower xattr
authorColin Ian King <colin.king@canonical.com>
Thu, 5 Apr 2012 19:31:56 +0000 (13:31 -0600)
committerWilly Tarreau <w@1wt.eu>
Sun, 7 Oct 2012 21:37:13 +0000 (23:37 +0200)
commit 545d680938be1e86a6c5250701ce9abaf360c495 upstream.

After passing through a ->setxattr() call, eCryptfs needs to copy the
inode attributes from the lower inode to the eCryptfs inode, as they
may have changed in the lower filesystem's ->setxattr() path.

One example is if an extended attribute containing a POSIX Access
Control List is being set. The new ACL may cause the lower filesystem to
modify the mode of the lower inode and the eCryptfs inode would need to
be updated to reflect the new mode.

https://launchpad.net/bugs/926292

Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
Reported-by: Sebastien Bacher <seb128@ubuntu.com>
Cc: John Johansen <john.johansen@canonical.com>
Cc: <stable@vger.kernel.org>
Acked-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Acked-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
fs/ecryptfs/inode.c

index 90a6087942bce0a4171af3577432bf3400a84dae..645da172ba592c8a966619e07d3eef650e96fae0 100644 (file)
@@ -1035,6 +1035,8 @@ ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
        rc = lower_dentry->d_inode->i_op->setxattr(lower_dentry, name, value,
                                                   size, flags);
        mutex_unlock(&lower_dentry->d_inode->i_mutex);
+       if (!rc)
+               fsstack_copy_attr_all(dentry->d_inode, lower_dentry->d_inode, NULL);
 out:
        return rc;
 }