summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorKonstantin Khlebnikov <koct9i@gmail.com>2016-01-31 16:21:29 +0300
committerMiklos Szeredi <miklos@szeredi.hu>2016-03-03 17:17:46 +0100
commitb81de061fa59f17d2730aabb1b84419ef3913810 (patch)
treed861fedc4ab91b88d225fff34f292bd7c465f6d2 /fs
parent45d11738969633ec07ca35d75d486bf2d8918df6 (diff)
downloadlinux-stable-b81de061fa59f17d2730aabb1b84419ef3913810.tar.gz
linux-stable-b81de061fa59f17d2730aabb1b84419ef3913810.tar.bz2
linux-stable-b81de061fa59f17d2730aabb1b84419ef3913810.zip
ovl: copy new uid/gid into overlayfs runtime inode
Overlayfs must update uid/gid after chown, otherwise functions like inode_owner_or_capable() will check user against stale uid. Catched by xfstests generic/087, it chowns file and calls utimes. Signed-off-by: Konstantin Khlebnikov <koct9i@gmail.com> Signed-off-by: Miklos Szeredi <miklos@szeredi.hu> Cc: <stable@vger.kernel.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/overlayfs/inode.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 49e204560655..a4ff5d0d7db9 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -65,6 +65,8 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
inode_lock(upperdentry->d_inode);
err = notify_change(upperdentry, attr, NULL);
+ if (!err)
+ ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
inode_unlock(upperdentry->d_inode);
}
ovl_drop_write(dentry);