diff options
Diffstat (limited to 'fs/open.c')
| -rw-r--r-- | fs/open.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/open.c b/fs/open.c index f732fb94600c..9ff2f621b760 100644 --- a/fs/open.c +++ b/fs/open.c @@ -32,6 +32,7 @@  #include <linux/ima.h>  #include <linux/dnotify.h>  #include <linux/compat.h> +#include <linux/mnt_idmapping.h>  #include "internal.h" @@ -640,7 +641,7 @@ SYSCALL_DEFINE2(chmod, const char __user *, filename, umode_t, mode)  int chown_common(const struct path *path, uid_t user, gid_t group)  { -	struct user_namespace *mnt_userns; +	struct user_namespace *mnt_userns, *fs_userns;  	struct inode *inode = path->dentry->d_inode;  	struct inode *delegated_inode = NULL;  	int error; @@ -652,8 +653,9 @@ int chown_common(const struct path *path, uid_t user, gid_t group)  	gid = make_kgid(current_user_ns(), group);  	mnt_userns = mnt_user_ns(path->mnt); -	uid = kuid_from_mnt(mnt_userns, uid); -	gid = kgid_from_mnt(mnt_userns, gid); +	fs_userns = i_user_ns(inode); +	uid = mapped_kuid_user(mnt_userns, fs_userns, uid); +	gid = mapped_kgid_user(mnt_userns, fs_userns, gid);  retry_deleg:  	newattrs.ia_valid =  ATTR_CTIME;  |