diff options
Diffstat (limited to 'fs/overlayfs/inode.c')
| -rw-r--r-- | fs/overlayfs/inode.c | 46 | 
1 files changed, 23 insertions, 23 deletions
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index ee6dfa577c93..541cf3717fc2 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -19,7 +19,7 @@  #include "overlayfs.h" -int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, +int ovl_setattr(struct mnt_idmap *idmap, struct dentry *dentry,  		struct iattr *attr)  {  	int err; @@ -28,7 +28,7 @@ int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,  	struct dentry *upperdentry;  	const struct cred *old_cred; -	err = setattr_prepare(&init_user_ns, dentry, attr); +	err = setattr_prepare(&nop_mnt_idmap, dentry, attr);  	if (err)  		return err; @@ -153,7 +153,7 @@ static void ovl_map_dev_ino(struct dentry *dentry, struct kstat *stat, int fsid)  	}  } -int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path, +int ovl_getattr(struct mnt_idmap *idmap, const struct path *path,  		struct kstat *stat, u32 request_mask, unsigned int flags)  {  	struct dentry *dentry = path->dentry; @@ -278,7 +278,7 @@ out:  	return err;  } -int ovl_permission(struct user_namespace *mnt_userns, +int ovl_permission(struct mnt_idmap *idmap,  		   struct inode *inode, int mask)  {  	struct inode *upperinode = ovl_inode_upper(inode); @@ -298,7 +298,7 @@ int ovl_permission(struct user_namespace *mnt_userns,  	 * Check overlay inode with the creds of task and underlying inode  	 * with creds of mounter  	 */ -	err = generic_permission(&init_user_ns, inode, mask); +	err = generic_permission(&nop_mnt_idmap, inode, mask);  	if (err)  		return err; @@ -310,7 +310,7 @@ int ovl_permission(struct user_namespace *mnt_userns,  		/* Make sure mounter can read file for copy up later */  		mask |= MAY_READ;  	} -	err = inode_permission(mnt_user_ns(realpath.mnt), realinode, mask); +	err = inode_permission(mnt_idmap(realpath.mnt), realinode, mask);  	revert_creds(old_cred);  	return err; @@ -361,7 +361,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,  	if (!value && !upperdentry) {  		ovl_path_lower(dentry, &realpath);  		old_cred = ovl_override_creds(dentry->d_sb); -		err = vfs_getxattr(mnt_user_ns(realpath.mnt), realdentry, name, NULL, 0); +		err = vfs_getxattr(mnt_idmap(realpath.mnt), realdentry, name, NULL, 0);  		revert_creds(old_cred);  		if (err < 0)  			goto out_drop_write; @@ -403,7 +403,7 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,  	ovl_i_path_real(inode, &realpath);  	old_cred = ovl_override_creds(dentry->d_sb); -	res = vfs_getxattr(mnt_user_ns(realpath.mnt), realpath.dentry, name, value, size); +	res = vfs_getxattr(mnt_idmap(realpath.mnt), realpath.dentry, name, value, size);  	revert_creds(old_cred);  	return res;  } @@ -463,7 +463,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)   * alter the POSIX ACLs for the underlying filesystem.   */  static void ovl_idmap_posix_acl(const struct inode *realinode, -				struct user_namespace *mnt_userns, +				struct mnt_idmap *idmap,  				struct posix_acl *acl)  {  	struct user_namespace *fs_userns = i_user_ns(realinode); @@ -475,11 +475,11 @@ static void ovl_idmap_posix_acl(const struct inode *realinode,  		struct posix_acl_entry *e = &acl->a_entries[i];  		switch (e->e_tag) {  		case ACL_USER: -			vfsuid = make_vfsuid(mnt_userns, fs_userns, e->e_uid); +			vfsuid = make_vfsuid(idmap, fs_userns, e->e_uid);  			e->e_uid = vfsuid_into_kuid(vfsuid);  			break;  		case ACL_GROUP: -			vfsgid = make_vfsgid(mnt_userns, fs_userns, e->e_gid); +			vfsgid = make_vfsgid(idmap, fs_userns, e->e_gid);  			e->e_gid = vfsgid_into_kgid(vfsgid);  			break;  		} @@ -514,15 +514,15 @@ struct posix_acl *ovl_get_acl_path(const struct path *path,  				   const char *acl_name, bool noperm)  {  	struct posix_acl *real_acl, *clone; -	struct user_namespace *mnt_userns; +	struct mnt_idmap *idmap;  	struct inode *realinode = d_inode(path->dentry); -	mnt_userns = mnt_user_ns(path->mnt); +	idmap = mnt_idmap(path->mnt);  	if (noperm)  		real_acl = get_inode_acl(realinode, posix_acl_type(acl_name));  	else -		real_acl = vfs_get_acl(mnt_userns, path->dentry, acl_name); +		real_acl = vfs_get_acl(idmap, path->dentry, acl_name);  	if (IS_ERR_OR_NULL(real_acl))  		return real_acl; @@ -540,7 +540,7 @@ struct posix_acl *ovl_get_acl_path(const struct path *path,  	if (!clone)  		return ERR_PTR(-ENOMEM); -	ovl_idmap_posix_acl(realinode, mnt_userns, clone); +	ovl_idmap_posix_acl(realinode, idmap, clone);  	return clone;  } @@ -555,7 +555,7 @@ struct posix_acl *ovl_get_acl_path(const struct path *path,   *   * This is obviously only relevant when idmapped layers are used.   */ -struct posix_acl *do_ovl_get_acl(struct user_namespace *mnt_userns, +struct posix_acl *do_ovl_get_acl(struct mnt_idmap *idmap,  				 struct inode *inode, int type,  				 bool rcu, bool noperm)  { @@ -618,7 +618,7 @@ static int ovl_set_or_remove_acl(struct dentry *dentry, struct inode *inode,  		ovl_path_lower(dentry, &realpath);  		old_cred = ovl_override_creds(dentry->d_sb); -		real_acl = vfs_get_acl(mnt_user_ns(realpath.mnt), realdentry, +		real_acl = vfs_get_acl(mnt_idmap(realpath.mnt), realdentry,  				       acl_name);  		revert_creds(old_cred);  		if (IS_ERR(real_acl)) { @@ -651,7 +651,7 @@ out_drop_write:  	return err;  } -int ovl_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry, +int ovl_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,  		struct posix_acl *acl, int type)  {  	int err; @@ -665,7 +665,7 @@ int ovl_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry,  		return -EOPNOTSUPP;  	if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode))  		return acl ? -EACCES : 0; -	if (!inode_owner_or_capable(&init_user_ns, inode)) +	if (!inode_owner_or_capable(&nop_mnt_idmap, inode))  		return -EPERM;  	/* @@ -674,10 +674,10 @@ int ovl_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry,  	 */  	if (unlikely(inode->i_mode & S_ISGID) && type == ACL_TYPE_ACCESS &&  	    !in_group_p(inode->i_gid) && -	    !capable_wrt_inode_uidgid(&init_user_ns, inode, CAP_FSETID)) { +	    !capable_wrt_inode_uidgid(&nop_mnt_idmap, inode, CAP_FSETID)) {  		struct iattr iattr = { .ia_valid = ATTR_KILL_SGID }; -		err = ovl_setattr(&init_user_ns, dentry, &iattr); +		err = ovl_setattr(&nop_mnt_idmap, dentry, &iattr);  		if (err)  			return err;  	} @@ -755,10 +755,10 @@ int ovl_real_fileattr_set(const struct path *realpath, struct fileattr *fa)  	if (err)  		return err; -	return vfs_fileattr_set(mnt_user_ns(realpath->mnt), realpath->dentry, fa); +	return vfs_fileattr_set(mnt_idmap(realpath->mnt), realpath->dentry, fa);  } -int ovl_fileattr_set(struct user_namespace *mnt_userns, +int ovl_fileattr_set(struct mnt_idmap *idmap,  		     struct dentry *dentry, struct fileattr *fa)  {  	struct inode *inode = d_inode(dentry);  |