Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: port ->setattr() to pass mnt_idmap

Convert to struct mnt_idmap.

Last cycle we merged the necessary infrastructure in
256c8aed2b42 ("fs: introduce dedicated idmap type for mounts").
This is just the conversion to struct mnt_idmap.

Currently we still pass around the plain namespace that was attached to a
mount. This is in general pretty convenient but it makes it easy to
conflate namespaces that are relevant on the filesystem with namespaces
that are relevent on the mount level. Especially for non-vfs developers
without detailed knowledge in this area this can be a potential source for
bugs.

Once the conversion to struct mnt_idmap is done all helpers down to the
really low-level helpers will take a struct mnt_idmap argument instead of
two namespace arguments. This way it becomes impossible to conflate the two
eliminating the possibility of any bugs. All of the vfs and all filesystems
only operate on struct mnt_idmap.

Acked-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>

+257 -245
+1 -1
Documentation/filesystems/locking.rst
··· 71 71 void (*truncate) (struct inode *); 72 72 int (*permission) (struct inode *, int, unsigned int); 73 73 struct posix_acl * (*get_inode_acl)(struct inode *, int, bool); 74 - int (*setattr) (struct dentry *, struct iattr *); 74 + int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *); 75 75 int (*getattr) (const struct path *, struct kstat *, u32, unsigned int); 76 76 ssize_t (*listxattr) (struct dentry *, char *, size_t); 77 77 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
+1 -1
Documentation/filesystems/vfs.rst
··· 436 436 struct delayed_call *); 437 437 int (*permission) (struct user_namespace *, struct inode *, int); 438 438 struct posix_acl * (*get_inode_acl)(struct inode *, int, bool); 439 - int (*setattr) (struct user_namespace *, struct dentry *, struct iattr *); 439 + int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *); 440 440 int (*getattr) (struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int); 441 441 ssize_t (*listxattr) (struct dentry *, char *, size_t); 442 442 void (*update_time)(struct inode *, struct timespec *, int);
+2 -2
arch/powerpc/platforms/cell/spufs/inode.c
··· 92 92 } 93 93 94 94 static int 95 - spufs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 95 + spufs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 96 96 struct iattr *attr) 97 97 { 98 98 struct inode *inode = d_inode(dentry); ··· 100 100 if ((attr->ia_valid & ATTR_SIZE) && 101 101 (attr->ia_size != inode->i_size)) 102 102 return -EINVAL; 103 - setattr_copy(&init_user_ns, inode, attr); 103 + setattr_copy(&nop_mnt_idmap, inode, attr); 104 104 mark_inode_dirty(inode); 105 105 return 0; 106 106 }
+1 -1
fs/9p/acl.c
··· 225 225 * FIXME should we update ctime ? 226 226 * What is the following setxattr update the mode ? 227 227 */ 228 - v9fs_vfs_setattr_dotl(&init_user_ns, dentry, &iattr); 228 + v9fs_vfs_setattr_dotl(&nop_mnt_idmap, dentry, &iattr); 229 229 } 230 230 break; 231 231 case ACL_TYPE_DEFAULT:
+1 -1
fs/9p/v9fs_vfs.h
··· 60 60 int v9fs_uflags2omode(int uflags, int extended); 61 61 62 62 void v9fs_blank_wstat(struct p9_wstat *wstat); 63 - int v9fs_vfs_setattr_dotl(struct user_namespace *mnt_userns, 63 + int v9fs_vfs_setattr_dotl(struct mnt_idmap *idmap, 64 64 struct dentry *dentry, struct iattr *iattr); 65 65 int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end, 66 66 int datasync);
+4 -4
fs/9p/vfs_inode.c
··· 1060 1060 1061 1061 /** 1062 1062 * v9fs_vfs_setattr - set file metadata 1063 - * @mnt_userns: The user namespace of the mount 1063 + * @idmap: idmap of the mount 1064 1064 * @dentry: file whose metadata to set 1065 1065 * @iattr: metadata assignment structure 1066 1066 * 1067 1067 */ 1068 1068 1069 - static int v9fs_vfs_setattr(struct user_namespace *mnt_userns, 1069 + static int v9fs_vfs_setattr(struct mnt_idmap *idmap, 1070 1070 struct dentry *dentry, struct iattr *iattr) 1071 1071 { 1072 1072 int retval, use_dentry = 0; ··· 1077 1077 struct p9_wstat wstat; 1078 1078 1079 1079 p9_debug(P9_DEBUG_VFS, "\n"); 1080 - retval = setattr_prepare(&init_user_ns, dentry, iattr); 1080 + retval = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 1081 1081 if (retval) 1082 1082 return retval; 1083 1083 ··· 1135 1135 1136 1136 v9fs_invalidate_inode_attr(inode); 1137 1137 1138 - setattr_copy(&init_user_ns, inode, iattr); 1138 + setattr_copy(&nop_mnt_idmap, inode, iattr); 1139 1139 mark_inode_dirty(inode); 1140 1140 return 0; 1141 1141 }
+4 -4
fs/9p/vfs_inode_dotl.c
··· 529 529 530 530 /** 531 531 * v9fs_vfs_setattr_dotl - set file metadata 532 - * @mnt_userns: The user namespace of the mount 532 + * @idmap: idmap of the mount 533 533 * @dentry: file whose metadata to set 534 534 * @iattr: metadata assignment structure 535 535 * 536 536 */ 537 537 538 - int v9fs_vfs_setattr_dotl(struct user_namespace *mnt_userns, 538 + int v9fs_vfs_setattr_dotl(struct mnt_idmap *idmap, 539 539 struct dentry *dentry, struct iattr *iattr) 540 540 { 541 541 int retval, use_dentry = 0; ··· 548 548 549 549 p9_debug(P9_DEBUG_VFS, "\n"); 550 550 551 - retval = setattr_prepare(&init_user_ns, dentry, iattr); 551 + retval = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 552 552 if (retval) 553 553 return retval; 554 554 ··· 597 597 truncate_setsize(inode, iattr->ia_size); 598 598 599 599 v9fs_invalidate_inode_attr(inode); 600 - setattr_copy(&init_user_ns, inode, iattr); 600 + setattr_copy(&nop_mnt_idmap, inode, iattr); 601 601 mark_inode_dirty(inode); 602 602 if (iattr->ia_valid & ATTR_MODE) { 603 603 /* We also want to update ACL when we update mode bits */
+1 -1
fs/adfs/adfs.h
··· 144 144 /* Inode stuff */ 145 145 struct inode *adfs_iget(struct super_block *sb, struct object_info *obj); 146 146 int adfs_write_inode(struct inode *inode, struct writeback_control *wbc); 147 - int adfs_notify_change(struct user_namespace *mnt_userns, struct dentry *dentry, 147 + int adfs_notify_change(struct mnt_idmap *idmap, struct dentry *dentry, 148 148 struct iattr *attr); 149 149 150 150 /* map.c */
+2 -2
fs/adfs/inode.c
··· 294 294 * later. 295 295 */ 296 296 int 297 - adfs_notify_change(struct user_namespace *mnt_userns, struct dentry *dentry, 297 + adfs_notify_change(struct mnt_idmap *idmap, struct dentry *dentry, 298 298 struct iattr *attr) 299 299 { 300 300 struct inode *inode = d_inode(dentry); ··· 302 302 unsigned int ia_valid = attr->ia_valid; 303 303 int error; 304 304 305 - error = setattr_prepare(&init_user_ns, dentry, attr); 305 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 306 306 307 307 /* 308 308 * we can't change the UID or GID of any file -
+1 -1
fs/affs/affs.h
··· 185 185 /* inode.c */ 186 186 187 187 extern struct inode *affs_new_inode(struct inode *dir); 188 - extern int affs_notify_change(struct user_namespace *mnt_userns, 188 + extern int affs_notify_change(struct mnt_idmap *idmap, 189 189 struct dentry *dentry, struct iattr *attr); 190 190 extern void affs_evict_inode(struct inode *inode); 191 191 extern struct inode *affs_iget(struct super_block *sb,
+3 -3
fs/affs/inode.c
··· 216 216 } 217 217 218 218 int 219 - affs_notify_change(struct user_namespace *mnt_userns, struct dentry *dentry, 219 + affs_notify_change(struct mnt_idmap *idmap, struct dentry *dentry, 220 220 struct iattr *attr) 221 221 { 222 222 struct inode *inode = d_inode(dentry); ··· 224 224 225 225 pr_debug("notify_change(%lu,0x%x)\n", inode->i_ino, attr->ia_valid); 226 226 227 - error = setattr_prepare(&init_user_ns, dentry, attr); 227 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 228 228 if (error) 229 229 goto out; 230 230 ··· 250 250 affs_truncate(inode); 251 251 } 252 252 253 - setattr_copy(&init_user_ns, inode, attr); 253 + setattr_copy(&nop_mnt_idmap, inode, attr); 254 254 mark_inode_dirty(inode); 255 255 256 256 if (attr->ia_valid & ATTR_MODE)
+1 -1
fs/afs/inode.c
··· 870 870 /* 871 871 * set the attributes of an inode 872 872 */ 873 - int afs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 873 + int afs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 874 874 struct iattr *attr) 875 875 { 876 876 const unsigned int supported =
+1 -1
fs/afs/internal.h
··· 1172 1172 extern int afs_validate(struct afs_vnode *, struct key *); 1173 1173 extern int afs_getattr(struct user_namespace *mnt_userns, const struct path *, 1174 1174 struct kstat *, u32, unsigned int); 1175 - extern int afs_setattr(struct user_namespace *mnt_userns, struct dentry *, struct iattr *); 1175 + extern int afs_setattr(struct mnt_idmap *idmap, struct dentry *, struct iattr *); 1176 1176 extern void afs_evict_inode(struct inode *); 1177 1177 extern int afs_drop_inode(struct inode *); 1178 1178
+17 -15
fs/attr.c
··· 142 142 143 143 /** 144 144 * setattr_prepare - check if attribute changes to a dentry are allowed 145 - * @mnt_userns: user namespace of the mount the inode was found from 145 + * @idmap: idmap of the mount the inode was found from 146 146 * @dentry: dentry to check 147 147 * @attr: attributes to change 148 148 * ··· 152 152 * SGID bit from mode if user is not allowed to set it. Also file capabilities 153 153 * and IMA extended attributes are cleared if ATTR_KILL_PRIV is set. 154 154 * 155 - * If the inode has been found through an idmapped mount the user namespace of 156 - * the vfsmount must be passed through @mnt_userns. This function will then 157 - * take care to map the inode according to @mnt_userns before checking 155 + * If the inode has been found through an idmapped mount the idmap of 156 + * the vfsmount must be passed through @idmap. This function will then 157 + * take care to map the inode according to @idmap before checking 158 158 * permissions. On non-idmapped mounts or if permission checking is to be 159 - * performed on the raw inode simply passs init_user_ns. 159 + * performed on the raw inode simply passs @nop_mnt_idmap. 160 160 * 161 161 * Should be called as the first thing in ->setattr implementations, 162 162 * possibly after taking additional locks. 163 163 */ 164 - int setattr_prepare(struct user_namespace *mnt_userns, struct dentry *dentry, 164 + int setattr_prepare(struct mnt_idmap *idmap, struct dentry *dentry, 165 165 struct iattr *attr) 166 166 { 167 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 167 168 struct inode *inode = d_inode(dentry); 168 169 unsigned int ia_valid = attr->ia_valid; 169 170 ··· 277 276 278 277 /** 279 278 * setattr_copy - copy simple metadata updates into the generic inode 280 - * @mnt_userns: user namespace of the mount the inode was found from 279 + * @idmap: idmap of the mount the inode was found from 281 280 * @inode: the inode to be updated 282 281 * @attr: the new attributes 283 282 * ··· 290 289 * Noticeably missing is inode size update, which is more complex 291 290 * as it requires pagecache updates. 292 291 * 293 - * If the inode has been found through an idmapped mount the user namespace of 294 - * the vfsmount must be passed through @mnt_userns. This function will then 295 - * take care to map the inode according to @mnt_userns before checking 292 + * If the inode has been found through an idmapped mount the idmap of 293 + * the vfsmount must be passed through @idmap. This function will then 294 + * take care to map the inode according to @idmap before checking 296 295 * permissions. On non-idmapped mounts or if permission checking is to be 297 - * performed on the raw inode simply passs init_user_ns. 296 + * performed on the raw inode simply pass @nop_mnt_idmap. 298 297 * 299 298 * The inode is not marked as dirty after this operation. The rationale is 300 299 * that for "simple" filesystems, the struct inode is the inode storage. 301 300 * The caller is free to mark the inode dirty afterwards if needed. 302 301 */ 303 - void setattr_copy(struct user_namespace *mnt_userns, struct inode *inode, 302 + void setattr_copy(struct mnt_idmap *idmap, struct inode *inode, 304 303 const struct iattr *attr) 305 304 { 305 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 306 306 unsigned int ia_valid = attr->ia_valid; 307 307 308 308 i_uid_update(mnt_userns, attr, inode); ··· 474 472 !vfsgid_valid(i_gid_into_vfsgid(mnt_userns, inode))) 475 473 return -EOVERFLOW; 476 474 477 - error = security_inode_setattr(mnt_userns, dentry, attr); 475 + error = security_inode_setattr(idmap, dentry, attr); 478 476 if (error) 479 477 return error; 480 478 error = try_break_deleg(inode, delegated_inode); ··· 482 480 return error; 483 481 484 482 if (inode->i_op->setattr) 485 - error = inode->i_op->setattr(mnt_userns, dentry, attr); 483 + error = inode->i_op->setattr(idmap, dentry, attr); 486 484 else 487 - error = simple_setattr(mnt_userns, dentry, attr); 485 + error = simple_setattr(idmap, dentry, attr); 488 486 489 487 if (!error) { 490 488 fsnotify_change(dentry, ia_valid);
+1 -1
fs/bad_inode.c
··· 102 102 return -EIO; 103 103 } 104 104 105 - static int bad_inode_setattr(struct user_namespace *mnt_userns, 105 + static int bad_inode_setattr(struct mnt_idmap *idmap, 106 106 struct dentry *direntry, struct iattr *attrs) 107 107 { 108 108 return -EIO;
+5 -4
fs/btrfs/inode.c
··· 5281 5281 return ret; 5282 5282 } 5283 5283 5284 - static int btrfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 5284 + static int btrfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 5285 5285 struct iattr *attr) 5286 5286 { 5287 5287 struct inode *inode = d_inode(dentry); ··· 5291 5291 if (btrfs_root_readonly(root)) 5292 5292 return -EROFS; 5293 5293 5294 - err = setattr_prepare(mnt_userns, dentry, attr); 5294 + err = setattr_prepare(idmap, dentry, attr); 5295 5295 if (err) 5296 5296 return err; 5297 5297 ··· 5302 5302 } 5303 5303 5304 5304 if (attr->ia_valid) { 5305 - setattr_copy(mnt_userns, inode, attr); 5305 + setattr_copy(idmap, inode, attr); 5306 5306 inode_inc_iversion(inode); 5307 5307 err = btrfs_dirty_inode(BTRFS_I(inode)); 5308 5308 5309 5309 if (!err && attr->ia_valid & ATTR_MODE) 5310 - err = posix_acl_chmod(mnt_userns, dentry, inode->i_mode); 5310 + err = posix_acl_chmod(mnt_idmap_owner(idmap), dentry, 5311 + inode->i_mode); 5311 5312 } 5312 5313 5313 5314 return err;
+2 -2
fs/ceph/inode.c
··· 2227 2227 /* 2228 2228 * setattr 2229 2229 */ 2230 - int ceph_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 2230 + int ceph_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 2231 2231 struct iattr *attr) 2232 2232 { 2233 2233 struct inode *inode = d_inode(dentry); ··· 2240 2240 if (ceph_inode_is_shutdown(inode)) 2241 2241 return -ESTALE; 2242 2242 2243 - err = setattr_prepare(&init_user_ns, dentry, attr); 2243 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 2244 2244 if (err != 0) 2245 2245 return err; 2246 2246
+1 -1
fs/ceph/super.h
··· 1043 1043 extern int ceph_permission(struct user_namespace *mnt_userns, 1044 1044 struct inode *inode, int mask); 1045 1045 extern int __ceph_setattr(struct inode *inode, struct iattr *attr); 1046 - extern int ceph_setattr(struct user_namespace *mnt_userns, 1046 + extern int ceph_setattr(struct mnt_idmap *idmap, 1047 1047 struct dentry *dentry, struct iattr *attr); 1048 1048 extern int ceph_getattr(struct user_namespace *mnt_userns, 1049 1049 const struct path *path, struct kstat *stat,
+1 -1
fs/cifs/cifsfs.h
··· 74 74 extern int cifs_zap_mapping(struct inode *inode); 75 75 extern int cifs_getattr(struct user_namespace *, const struct path *, 76 76 struct kstat *, u32, unsigned int); 77 - extern int cifs_setattr(struct user_namespace *, struct dentry *, 77 + extern int cifs_setattr(struct mnt_idmap *, struct dentry *, 78 78 struct iattr *); 79 79 extern int cifs_fiemap(struct inode *, struct fiemap_extent_info *, u64 start, 80 80 u64 len);
+5 -5
fs/cifs/inode.c
··· 2752 2752 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) 2753 2753 attrs->ia_valid |= ATTR_FORCE; 2754 2754 2755 - rc = setattr_prepare(&init_user_ns, direntry, attrs); 2755 + rc = setattr_prepare(&nop_mnt_idmap, direntry, attrs); 2756 2756 if (rc < 0) 2757 2757 goto out; 2758 2758 ··· 2859 2859 fscache_resize_cookie(cifs_inode_cookie(inode), attrs->ia_size); 2860 2860 } 2861 2861 2862 - setattr_copy(&init_user_ns, inode, attrs); 2862 + setattr_copy(&nop_mnt_idmap, inode, attrs); 2863 2863 mark_inode_dirty(inode); 2864 2864 2865 2865 /* force revalidate when any of these times are set since some ··· 2903 2903 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) 2904 2904 attrs->ia_valid |= ATTR_FORCE; 2905 2905 2906 - rc = setattr_prepare(&init_user_ns, direntry, attrs); 2906 + rc = setattr_prepare(&nop_mnt_idmap, direntry, attrs); 2907 2907 if (rc < 0) 2908 2908 goto cifs_setattr_exit; 2909 2909 ··· 3058 3058 fscache_resize_cookie(cifs_inode_cookie(inode), attrs->ia_size); 3059 3059 } 3060 3060 3061 - setattr_copy(&init_user_ns, inode, attrs); 3061 + setattr_copy(&nop_mnt_idmap, inode, attrs); 3062 3062 mark_inode_dirty(inode); 3063 3063 3064 3064 cifs_setattr_exit: ··· 3068 3068 } 3069 3069 3070 3070 int 3071 - cifs_setattr(struct user_namespace *mnt_userns, struct dentry *direntry, 3071 + cifs_setattr(struct mnt_idmap *idmap, struct dentry *direntry, 3072 3072 struct iattr *attrs) 3073 3073 { 3074 3074 struct cifs_sb_info *cifs_sb = CIFS_SB(direntry->d_sb);
+1 -1
fs/coda/coda_linux.h
··· 51 51 int coda_revalidate_inode(struct inode *); 52 52 int coda_getattr(struct user_namespace *, const struct path *, struct kstat *, 53 53 u32, unsigned int); 54 - int coda_setattr(struct user_namespace *, struct dentry *, struct iattr *); 54 + int coda_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 55 55 56 56 /* this file: helpers */ 57 57 char *coda_f2s(struct CodaFid *f);
+1 -1
fs/coda/inode.c
··· 260 260 return err; 261 261 } 262 262 263 - int coda_setattr(struct user_namespace *mnt_userns, struct dentry *de, 263 + int coda_setattr(struct mnt_idmap *idmap, struct dentry *de, 264 264 struct iattr *iattr) 265 265 { 266 266 struct inode *inode = d_inode(de);
+1 -1
fs/configfs/configfs_internal.h
··· 77 77 78 78 extern const unsigned char * configfs_get_name(struct configfs_dirent *sd); 79 79 extern void configfs_drop_dentry(struct configfs_dirent *sd, struct dentry *parent); 80 - extern int configfs_setattr(struct user_namespace *mnt_userns, 80 + extern int configfs_setattr(struct mnt_idmap *idmap, 81 81 struct dentry *dentry, struct iattr *iattr); 82 82 83 83 extern struct dentry *configfs_pin_fs(void);
+2 -2
fs/configfs/inode.c
··· 32 32 .setattr = configfs_setattr, 33 33 }; 34 34 35 - int configfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 35 + int configfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 36 36 struct iattr *iattr) 37 37 { 38 38 struct inode * inode = d_inode(dentry); ··· 60 60 } 61 61 /* attributes were changed atleast once in past */ 62 62 63 - error = simple_setattr(mnt_userns, dentry, iattr); 63 + error = simple_setattr(idmap, dentry, iattr); 64 64 if (error) 65 65 return error; 66 66
+2 -2
fs/debugfs/inode.c
··· 42 42 * so that we can use the file mode as part of a heuristic to determine whether 43 43 * to lock down individual files. 44 44 */ 45 - static int debugfs_setattr(struct user_namespace *mnt_userns, 45 + static int debugfs_setattr(struct mnt_idmap *idmap, 46 46 struct dentry *dentry, struct iattr *ia) 47 47 { 48 48 int ret; ··· 52 52 if (ret) 53 53 return ret; 54 54 } 55 - return simple_setattr(&init_user_ns, dentry, ia); 55 + return simple_setattr(&nop_mnt_idmap, dentry, ia); 56 56 } 57 57 58 58 static const struct inode_operations debugfs_file_inode_operations = {
+3 -3
fs/ecryptfs/inode.c
··· 873 873 874 874 /** 875 875 * ecryptfs_setattr 876 - * @mnt_userns: user namespace of the target mount 876 + * @idmap: idmap of the target mount 877 877 * @dentry: dentry handle to the inode to modify 878 878 * @ia: Structure with flags of what to change and values 879 879 * ··· 884 884 * All other metadata changes will be passed right to the lower filesystem, 885 885 * and we will just update our inode to look like the lower. 886 886 */ 887 - static int ecryptfs_setattr(struct user_namespace *mnt_userns, 887 + static int ecryptfs_setattr(struct mnt_idmap *idmap, 888 888 struct dentry *dentry, struct iattr *ia) 889 889 { 890 890 int rc = 0; ··· 939 939 } 940 940 mutex_unlock(&crypt_stat->cs_mutex); 941 941 942 - rc = setattr_prepare(&init_user_ns, dentry, ia); 942 + rc = setattr_prepare(&nop_mnt_idmap, dentry, ia); 943 943 if (rc) 944 944 goto out; 945 945 if (ia->ia_valid & ATTR_SIZE) {
+1 -1
fs/exfat/exfat_fs.h
··· 450 450 extern const struct file_operations exfat_file_operations; 451 451 int __exfat_truncate(struct inode *inode); 452 452 void exfat_truncate(struct inode *inode); 453 - int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 453 + int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 454 454 struct iattr *attr); 455 455 int exfat_getattr(struct user_namespace *mnt_userns, const struct path *path, 456 456 struct kstat *stat, unsigned int request_mask,
+3 -3
fs/exfat/file.c
··· 242 242 return 0; 243 243 } 244 244 245 - int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 245 + int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 246 246 struct iattr *attr) 247 247 { 248 248 struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb); ··· 266 266 ATTR_TIMES_SET); 267 267 } 268 268 269 - error = setattr_prepare(&init_user_ns, dentry, attr); 269 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 270 270 attr->ia_valid = ia_valid; 271 271 if (error) 272 272 goto out; ··· 293 293 if (attr->ia_valid & ATTR_SIZE) 294 294 inode->i_mtime = inode->i_ctime = current_time(inode); 295 295 296 - setattr_copy(&init_user_ns, inode, attr); 296 + setattr_copy(&nop_mnt_idmap, inode, attr); 297 297 exfat_truncate_atime(&inode->i_atime); 298 298 299 299 if (attr->ia_valid & ATTR_SIZE) {
+1 -1
fs/ext2/ext2.h
··· 753 753 extern int ext2_write_inode (struct inode *, struct writeback_control *); 754 754 extern void ext2_evict_inode(struct inode *); 755 755 extern int ext2_get_block(struct inode *, sector_t, struct buffer_head *, int); 756 - extern int ext2_setattr (struct user_namespace *, struct dentry *, struct iattr *); 756 + extern int ext2_setattr (struct mnt_idmap *, struct dentry *, struct iattr *); 757 757 extern int ext2_getattr (struct user_namespace *, const struct path *, 758 758 struct kstat *, u32, unsigned int); 759 759 extern void ext2_set_inode_flags(struct inode *inode);
+4 -3
fs/ext2/inode.c
··· 1618 1618 return 0; 1619 1619 } 1620 1620 1621 - int ext2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 1621 + int ext2_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 1622 1622 struct iattr *iattr) 1623 1623 { 1624 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 1624 1625 struct inode *inode = d_inode(dentry); 1625 1626 int error; 1626 1627 1627 - error = setattr_prepare(&init_user_ns, dentry, iattr); 1628 + error = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 1628 1629 if (error) 1629 1630 return error; 1630 1631 ··· 1645 1644 if (error) 1646 1645 return error; 1647 1646 } 1648 - setattr_copy(&init_user_ns, inode, iattr); 1647 + setattr_copy(&nop_mnt_idmap, inode, iattr); 1649 1648 if (iattr->ia_valid & ATTR_MODE) 1650 1649 error = posix_acl_chmod(&init_user_ns, dentry, inode->i_mode); 1651 1650 mark_inode_dirty(inode);
+1 -1
fs/ext4/ext4.h
··· 2976 2976 __ext4_iget((sb), (ino), (flags), __func__, __LINE__) 2977 2977 2978 2978 extern int ext4_write_inode(struct inode *, struct writeback_control *); 2979 - extern int ext4_setattr(struct user_namespace *, struct dentry *, 2979 + extern int ext4_setattr(struct mnt_idmap *, struct dentry *, 2980 2980 struct iattr *); 2981 2981 extern u32 ext4_dio_alignment(struct inode *inode); 2982 2982 extern int ext4_getattr(struct user_namespace *, const struct path *,
+4 -3
fs/ext4/inode.c
··· 5434 5434 * 5435 5435 * Called with inode->i_rwsem down. 5436 5436 */ 5437 - int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 5437 + int ext4_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 5438 5438 struct iattr *attr) 5439 5439 { 5440 5440 struct inode *inode = d_inode(dentry); ··· 5442 5442 int orphan = 0; 5443 5443 const unsigned int ia_valid = attr->ia_valid; 5444 5444 bool inc_ivers = true; 5445 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 5445 5446 5446 5447 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) 5447 5448 return -EIO; ··· 5455 5454 ATTR_GID | ATTR_TIMES_SET)))) 5456 5455 return -EPERM; 5457 5456 5458 - error = setattr_prepare(mnt_userns, dentry, attr); 5457 + error = setattr_prepare(idmap, dentry, attr); 5459 5458 if (error) 5460 5459 return error; 5461 5460 ··· 5631 5630 if (!error) { 5632 5631 if (inc_ivers) 5633 5632 inode_inc_iversion(inode); 5634 - setattr_copy(mnt_userns, inode, attr); 5633 + setattr_copy(idmap, inode, attr); 5635 5634 mark_inode_dirty(inode); 5636 5635 } 5637 5636
+1 -1
fs/f2fs/f2fs.h
··· 3471 3471 int f2fs_truncate(struct inode *inode); 3472 3472 int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path, 3473 3473 struct kstat *stat, u32 request_mask, unsigned int flags); 3474 - int f2fs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 3474 + int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 3475 3475 struct iattr *attr); 3476 3476 int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end); 3477 3477 void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count);
+6 -4
fs/f2fs/file.c
··· 903 903 } 904 904 905 905 #ifdef CONFIG_F2FS_FS_POSIX_ACL 906 - static void __setattr_copy(struct user_namespace *mnt_userns, 906 + static void __setattr_copy(struct mnt_idmap *idmap, 907 907 struct inode *inode, const struct iattr *attr) 908 908 { 909 909 unsigned int ia_valid = attr->ia_valid; 910 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 910 911 911 912 i_uid_update(mnt_userns, attr, inode); 912 913 i_gid_update(mnt_userns, attr, inode); ··· 931 930 #define __setattr_copy setattr_copy 932 931 #endif 933 932 934 - int f2fs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 933 + int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 935 934 struct iattr *attr) 936 935 { 936 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 937 937 struct inode *inode = d_inode(dentry); 938 938 int err; 939 939 ··· 953 951 !f2fs_is_compress_backend_ready(inode)) 954 952 return -EOPNOTSUPP; 955 953 956 - err = setattr_prepare(mnt_userns, dentry, attr); 954 + err = setattr_prepare(idmap, dentry, attr); 957 955 if (err) 958 956 return err; 959 957 ··· 1025 1023 spin_unlock(&F2FS_I(inode)->i_size_lock); 1026 1024 } 1027 1025 1028 - __setattr_copy(mnt_userns, inode, attr); 1026 + __setattr_copy(idmap, inode, attr); 1029 1027 1030 1028 if (attr->ia_valid & ATTR_MODE) { 1031 1029 err = posix_acl_chmod(mnt_userns, dentry, f2fs_get_inode_mode(inode));
+1 -1
fs/fat/fat.h
··· 398 398 unsigned long arg); 399 399 extern const struct file_operations fat_file_operations; 400 400 extern const struct inode_operations fat_file_inode_operations; 401 - extern int fat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 401 + extern int fat_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 402 402 struct iattr *attr); 403 403 extern void fat_truncate_blocks(struct inode *inode, loff_t offset); 404 404 extern int fat_getattr(struct user_namespace *mnt_userns,
+6 -5
fs/fat/file.c
··· 90 90 * out the RO attribute for checking by the security 91 91 * module, just because it maps to a file mode. 92 92 */ 93 - err = security_inode_setattr(file_mnt_user_ns(file), 93 + err = security_inode_setattr(file_mnt_idmap(file), 94 94 file->f_path.dentry, &ia); 95 95 if (err) 96 96 goto out_unlock_inode; 97 97 98 98 /* This MUST be done before doing anything irreversible... */ 99 - err = fat_setattr(file_mnt_user_ns(file), file->f_path.dentry, &ia); 99 + err = fat_setattr(file_mnt_idmap(file), file->f_path.dentry, &ia); 100 100 if (err) 101 101 goto out_unlock_inode; 102 102 ··· 477 477 /* valid file mode bits */ 478 478 #define FAT_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXUGO) 479 479 480 - int fat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 480 + int fat_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 481 481 struct iattr *attr) 482 482 { 483 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 483 484 struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb); 484 485 struct inode *inode = d_inode(dentry); 485 486 unsigned int ia_valid; ··· 493 492 attr->ia_valid &= ~TIMES_SET_FLAGS; 494 493 } 495 494 496 - error = setattr_prepare(mnt_userns, dentry, attr); 495 + error = setattr_prepare(idmap, dentry, attr); 497 496 attr->ia_valid = ia_valid; 498 497 if (error) { 499 498 if (sbi->options.quiet) ··· 565 564 fat_truncate_time(inode, &attr->ia_mtime, S_MTIME); 566 565 attr->ia_valid &= ~(ATTR_ATIME|ATTR_CTIME|ATTR_MTIME); 567 566 568 - setattr_copy(mnt_userns, inode, attr); 567 + setattr_copy(idmap, inode, attr); 569 568 mark_inode_dirty(inode); 570 569 out: 571 570 return error;
+2 -2
fs/fuse/dir.c
··· 1690 1690 if (!fc->default_permissions) 1691 1691 attr->ia_valid |= ATTR_FORCE; 1692 1692 1693 - err = setattr_prepare(&init_user_ns, dentry, attr); 1693 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 1694 1694 if (err) 1695 1695 return err; 1696 1696 ··· 1837 1837 return err; 1838 1838 } 1839 1839 1840 - static int fuse_setattr(struct user_namespace *mnt_userns, struct dentry *entry, 1840 + static int fuse_setattr(struct mnt_idmap *idmap, struct dentry *entry, 1841 1841 struct iattr *attr) 1842 1842 { 1843 1843 struct inode *inode = d_inode(entry);
+4 -4
fs/gfs2/inode.c
··· 1881 1881 1882 1882 static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr) 1883 1883 { 1884 - setattr_copy(&init_user_ns, inode, attr); 1884 + setattr_copy(&nop_mnt_idmap, inode, attr); 1885 1885 mark_inode_dirty(inode); 1886 1886 return 0; 1887 1887 } ··· 1966 1966 1967 1967 /** 1968 1968 * gfs2_setattr - Change attributes on an inode 1969 - * @mnt_userns: User namespace of the mount the inode was found from 1969 + * @idmap: idmap of the mount the inode was found from 1970 1970 * @dentry: The dentry which is changing 1971 1971 * @attr: The structure describing the change 1972 1972 * ··· 1976 1976 * Returns: errno 1977 1977 */ 1978 1978 1979 - static int gfs2_setattr(struct user_namespace *mnt_userns, 1979 + static int gfs2_setattr(struct mnt_idmap *idmap, 1980 1980 struct dentry *dentry, struct iattr *attr) 1981 1981 { 1982 1982 struct inode *inode = d_inode(dentry); ··· 1996 1996 if (error) 1997 1997 goto error; 1998 1998 1999 - error = setattr_prepare(&init_user_ns, dentry, attr); 1999 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 2000 2000 if (error) 2001 2001 goto error; 2002 2002
+1 -1
fs/hfs/hfs_fs.h
··· 206 206 extern struct inode *hfs_new_inode(struct inode *, const struct qstr *, umode_t); 207 207 extern void hfs_inode_write_fork(struct inode *, struct hfs_extent *, __be32 *, __be32 *); 208 208 extern int hfs_write_inode(struct inode *, struct writeback_control *); 209 - extern int hfs_inode_setattr(struct user_namespace *, struct dentry *, 209 + extern int hfs_inode_setattr(struct mnt_idmap *, struct dentry *, 210 210 struct iattr *); 211 211 extern void hfs_inode_read_fork(struct inode *inode, struct hfs_extent *ext, 212 212 __be32 log_size, __be32 phys_size, u32 clump_size);
+3 -3
fs/hfs/inode.c
··· 606 606 * correspond to the same HFS file. 607 607 */ 608 608 609 - int hfs_inode_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 609 + int hfs_inode_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 610 610 struct iattr *attr) 611 611 { 612 612 struct inode *inode = d_inode(dentry); 613 613 struct hfs_sb_info *hsb = HFS_SB(inode->i_sb); 614 614 int error; 615 615 616 - error = setattr_prepare(&init_user_ns, dentry, 616 + error = setattr_prepare(&nop_mnt_idmap, dentry, 617 617 attr); /* basic permission checks */ 618 618 if (error) 619 619 return error; ··· 653 653 current_time(inode); 654 654 } 655 655 656 - setattr_copy(&init_user_ns, inode, attr); 656 + setattr_copy(&nop_mnt_idmap, inode, attr); 657 657 mark_inode_dirty(inode); 658 658 return 0; 659 659 }
+3 -3
fs/hfsplus/inode.c
··· 246 246 return 0; 247 247 } 248 248 249 - static int hfsplus_setattr(struct user_namespace *mnt_userns, 249 + static int hfsplus_setattr(struct mnt_idmap *idmap, 250 250 struct dentry *dentry, struct iattr *attr) 251 251 { 252 252 struct inode *inode = d_inode(dentry); 253 253 int error; 254 254 255 - error = setattr_prepare(&init_user_ns, dentry, attr); 255 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 256 256 if (error) 257 257 return error; 258 258 ··· 270 270 inode->i_mtime = inode->i_ctime = current_time(inode); 271 271 } 272 272 273 - setattr_copy(&init_user_ns, inode, attr); 273 + setattr_copy(&nop_mnt_idmap, inode, attr); 274 274 mark_inode_dirty(inode); 275 275 276 276 return 0;
+3 -3
fs/hostfs/hostfs_kern.c
··· 790 790 return err; 791 791 } 792 792 793 - static int hostfs_setattr(struct user_namespace *mnt_userns, 793 + static int hostfs_setattr(struct mnt_idmap *idmap, 794 794 struct dentry *dentry, struct iattr *attr) 795 795 { 796 796 struct inode *inode = d_inode(dentry); ··· 800 800 801 801 int fd = HOSTFS_I(inode)->fd; 802 802 803 - err = setattr_prepare(&init_user_ns, dentry, attr); 803 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 804 804 if (err) 805 805 return err; 806 806 ··· 857 857 attr->ia_size != i_size_read(inode)) 858 858 truncate_setsize(inode, attr->ia_size); 859 859 860 - setattr_copy(&init_user_ns, inode, attr); 860 + setattr_copy(&nop_mnt_idmap, inode, attr); 861 861 mark_inode_dirty(inode); 862 862 return 0; 863 863 }
+1 -1
fs/hpfs/hpfs_fn.h
··· 280 280 void hpfs_read_inode(struct inode *); 281 281 void hpfs_write_inode(struct inode *); 282 282 void hpfs_write_inode_nolock(struct inode *); 283 - int hpfs_setattr(struct user_namespace *, struct dentry *, struct iattr *); 283 + int hpfs_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 284 284 void hpfs_write_if_changed(struct inode *); 285 285 void hpfs_evict_inode(struct inode *); 286 286
+3 -3
fs/hpfs/inode.c
··· 257 257 brelse(bh); 258 258 } 259 259 260 - int hpfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 260 + int hpfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 261 261 struct iattr *attr) 262 262 { 263 263 struct inode *inode = d_inode(dentry); ··· 275 275 if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size) 276 276 goto out_unlock; 277 277 278 - error = setattr_prepare(&init_user_ns, dentry, attr); 278 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 279 279 if (error) 280 280 goto out_unlock; 281 281 ··· 289 289 hpfs_truncate(inode); 290 290 } 291 291 292 - setattr_copy(&init_user_ns, inode, attr); 292 + setattr_copy(&nop_mnt_idmap, inode, attr); 293 293 294 294 hpfs_write_inode(inode); 295 295
+3 -3
fs/hugetlbfs/inode.c
··· 898 898 return error; 899 899 } 900 900 901 - static int hugetlbfs_setattr(struct user_namespace *mnt_userns, 901 + static int hugetlbfs_setattr(struct mnt_idmap *idmap, 902 902 struct dentry *dentry, struct iattr *attr) 903 903 { 904 904 struct inode *inode = d_inode(dentry); ··· 907 907 unsigned int ia_valid = attr->ia_valid; 908 908 struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode); 909 909 910 - error = setattr_prepare(&init_user_ns, dentry, attr); 910 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 911 911 if (error) 912 912 return error; 913 913 ··· 924 924 hugetlb_vmtruncate(inode, newsize); 925 925 } 926 926 927 - setattr_copy(&init_user_ns, inode, attr); 927 + setattr_copy(&nop_mnt_idmap, inode, attr); 928 928 mark_inode_dirty(inode); 929 929 return 0; 930 930 }
+2 -2
fs/jffs2/fs.c
··· 190 190 return 0; 191 191 } 192 192 193 - int jffs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 193 + int jffs2_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 194 194 struct iattr *iattr) 195 195 { 196 196 struct inode *inode = d_inode(dentry); 197 197 int rc; 198 198 199 - rc = setattr_prepare(&init_user_ns, dentry, iattr); 199 + rc = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 200 200 if (rc) 201 201 return rc; 202 202
+1 -1
fs/jffs2/os-linux.h
··· 164 164 extern const struct inode_operations jffs2_symlink_inode_operations; 165 165 166 166 /* fs.c */ 167 - int jffs2_setattr (struct user_namespace *, struct dentry *, struct iattr *); 167 + int jffs2_setattr (struct mnt_idmap *, struct dentry *, struct iattr *); 168 168 int jffs2_do_setattr (struct inode *, struct iattr *); 169 169 struct inode *jffs2_iget(struct super_block *, unsigned long); 170 170 void jffs2_evict_inode (struct inode *);
+5 -5
fs/jfs/file.c
··· 85 85 return 0; 86 86 } 87 87 88 - int jfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 88 + int jfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 89 89 struct iattr *iattr) 90 90 { 91 91 struct inode *inode = d_inode(dentry); 92 92 int rc; 93 93 94 - rc = setattr_prepare(&init_user_ns, dentry, iattr); 94 + rc = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 95 95 if (rc) 96 96 return rc; 97 97 98 - if (is_quota_modification(mnt_userns, inode, iattr)) { 98 + if (is_quota_modification(&init_user_ns, inode, iattr)) { 99 99 rc = dquot_initialize(inode); 100 100 if (rc) 101 101 return rc; 102 102 } 103 103 if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) || 104 104 (iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid))) { 105 - rc = dquot_transfer(mnt_userns, inode, iattr); 105 + rc = dquot_transfer(&init_user_ns, inode, iattr); 106 106 if (rc) 107 107 return rc; 108 108 } ··· 119 119 jfs_truncate(inode); 120 120 } 121 121 122 - setattr_copy(&init_user_ns, inode, iattr); 122 + setattr_copy(&nop_mnt_idmap, inode, iattr); 123 123 mark_inode_dirty(inode); 124 124 125 125 if (iattr->ia_valid & ATTR_MODE)
+1 -1
fs/jfs/jfs_inode.h
··· 28 28 int fh_len, int fh_type); 29 29 extern void jfs_set_inode_flags(struct inode *); 30 30 extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int); 31 - extern int jfs_setattr(struct user_namespace *, struct dentry *, struct iattr *); 31 + extern int jfs_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 32 32 33 33 extern const struct address_space_operations jfs_aops; 34 34 extern const struct inode_operations jfs_dir_inode_operations;
+3 -3
fs/kernfs/inode.c
··· 107 107 return ret; 108 108 } 109 109 110 - int kernfs_iop_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 110 + int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 111 111 struct iattr *iattr) 112 112 { 113 113 struct inode *inode = d_inode(dentry); ··· 120 120 121 121 root = kernfs_root(kn); 122 122 down_write(&root->kernfs_rwsem); 123 - error = setattr_prepare(&init_user_ns, dentry, iattr); 123 + error = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 124 124 if (error) 125 125 goto out; 126 126 ··· 129 129 goto out; 130 130 131 131 /* this ignores size changes */ 132 - setattr_copy(&init_user_ns, inode, iattr); 132 + setattr_copy(&nop_mnt_idmap, inode, iattr); 133 133 134 134 out: 135 135 up_write(&root->kernfs_rwsem);
+1 -1
fs/kernfs/kernfs-internal.h
··· 129 129 void kernfs_evict_inode(struct inode *inode); 130 130 int kernfs_iop_permission(struct user_namespace *mnt_userns, 131 131 struct inode *inode, int mask); 132 - int kernfs_iop_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 132 + int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 133 133 struct iattr *iattr); 134 134 int kernfs_iop_getattr(struct user_namespace *mnt_userns, 135 135 const struct path *path, struct kstat *stat,
+5 -5
fs/libfs.c
··· 509 509 510 510 /** 511 511 * simple_setattr - setattr for simple filesystem 512 - * @mnt_userns: user namespace of the target mount 512 + * @idmap: idmap of the target mount 513 513 * @dentry: dentry 514 514 * @iattr: iattr structure 515 515 * ··· 522 522 * on simple regular filesystems. Anything that needs to change on-disk 523 523 * or wire state on size changes needs its own setattr method. 524 524 */ 525 - int simple_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 525 + int simple_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 526 526 struct iattr *iattr) 527 527 { 528 528 struct inode *inode = d_inode(dentry); 529 529 int error; 530 530 531 - error = setattr_prepare(mnt_userns, dentry, iattr); 531 + error = setattr_prepare(idmap, dentry, iattr); 532 532 if (error) 533 533 return error; 534 534 535 535 if (iattr->ia_valid & ATTR_SIZE) 536 536 truncate_setsize(inode, iattr->ia_size); 537 - setattr_copy(mnt_userns, inode, iattr); 537 + setattr_copy(idmap, inode, iattr); 538 538 mark_inode_dirty(inode); 539 539 return 0; 540 540 } ··· 1324 1324 return 0; 1325 1325 } 1326 1326 1327 - static int empty_dir_setattr(struct user_namespace *mnt_userns, 1327 + static int empty_dir_setattr(struct mnt_idmap *idmap, 1328 1328 struct dentry *dentry, struct iattr *attr) 1329 1329 { 1330 1330 return -EPERM;
+3 -3
fs/minix/file.c
··· 22 22 .splice_read = generic_file_splice_read, 23 23 }; 24 24 25 - static int minix_setattr(struct user_namespace *mnt_userns, 25 + static int minix_setattr(struct mnt_idmap *idmap, 26 26 struct dentry *dentry, struct iattr *attr) 27 27 { 28 28 struct inode *inode = d_inode(dentry); 29 29 int error; 30 30 31 - error = setattr_prepare(&init_user_ns, dentry, attr); 31 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 32 32 if (error) 33 33 return error; 34 34 ··· 42 42 minix_truncate(inode); 43 43 } 44 44 45 - setattr_copy(&init_user_ns, inode, attr); 45 + setattr_copy(&nop_mnt_idmap, inode, attr); 46 46 mark_inode_dirty(inode); 47 47 return 0; 48 48 }
+1 -1
fs/nfs/inode.c
··· 606 606 #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN) 607 607 608 608 int 609 - nfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 609 + nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 610 610 struct iattr *attr) 611 611 { 612 612 struct inode *inode = d_inode(dentry);
+2 -2
fs/nfs/namespace.c
··· 220 220 } 221 221 222 222 static int 223 - nfs_namespace_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 223 + nfs_namespace_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 224 224 struct iattr *attr) 225 225 { 226 226 if (NFS_FH(d_inode(dentry))->size != 0) 227 - return nfs_setattr(mnt_userns, dentry, attr); 227 + return nfs_setattr(idmap, dentry, attr); 228 228 return -EACCES; 229 229 } 230 230
+1 -1
fs/nfsd/nfsproc.c
··· 93 93 if (delta < 0) 94 94 delta = -delta; 95 95 if (delta < MAX_TOUCH_TIME_ERROR && 96 - setattr_prepare(&init_user_ns, fhp->fh_dentry, iap) != 0) { 96 + setattr_prepare(&nop_mnt_idmap, fhp->fh_dentry, iap) != 0) { 97 97 /* 98 98 * Turn off ATTR_[AM]TIME_SET but leave ATTR_[AM]TIME. 99 99 * This will cause notify_change to set these times
+3 -3
fs/nilfs2/inode.c
··· 949 949 */ 950 950 } 951 951 952 - int nilfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 952 + int nilfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 953 953 struct iattr *iattr) 954 954 { 955 955 struct nilfs_transaction_info ti; ··· 957 957 struct super_block *sb = inode->i_sb; 958 958 int err; 959 959 960 - err = setattr_prepare(&init_user_ns, dentry, iattr); 960 + err = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 961 961 if (err) 962 962 return err; 963 963 ··· 972 972 nilfs_truncate(inode); 973 973 } 974 974 975 - setattr_copy(&init_user_ns, inode, iattr); 975 + setattr_copy(&nop_mnt_idmap, inode, iattr); 976 976 mark_inode_dirty(inode); 977 977 978 978 if (iattr->ia_valid & ATTR_MODE) {
+1 -1
fs/nilfs2/nilfs.h
··· 271 271 extern void nilfs_update_inode(struct inode *, struct buffer_head *, int); 272 272 extern void nilfs_truncate(struct inode *); 273 273 extern void nilfs_evict_inode(struct inode *); 274 - extern int nilfs_setattr(struct user_namespace *, struct dentry *, 274 + extern int nilfs_setattr(struct mnt_idmap *, struct dentry *, 275 275 struct iattr *); 276 276 extern void nilfs_write_failed(struct address_space *mapping, loff_t to); 277 277 int nilfs_permission(struct user_namespace *mnt_userns, struct inode *inode,
+3 -3
fs/ntfs/inode.c
··· 2865 2865 2866 2866 /** 2867 2867 * ntfs_setattr - called from notify_change() when an attribute is being changed 2868 - * @mnt_userns: user namespace of the mount the inode was found from 2868 + * @idmap: idmap of the mount the inode was found from 2869 2869 * @dentry: dentry whose attributes to change 2870 2870 * @attr: structure describing the attributes and the changes 2871 2871 * ··· 2878 2878 * 2879 2879 * Called with ->i_mutex held. 2880 2880 */ 2881 - int ntfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 2881 + int ntfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 2882 2882 struct iattr *attr) 2883 2883 { 2884 2884 struct inode *vi = d_inode(dentry); 2885 2885 int err; 2886 2886 unsigned int ia_valid = attr->ia_valid; 2887 2887 2888 - err = setattr_prepare(&init_user_ns, dentry, attr); 2888 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 2889 2889 if (err) 2890 2890 goto out; 2891 2891 /* We do not support NTFS ACLs yet. */
+1 -1
fs/ntfs/inode.h
··· 289 289 extern int ntfs_truncate(struct inode *vi); 290 290 extern void ntfs_truncate_vfs(struct inode *vi); 291 291 292 - extern int ntfs_setattr(struct user_namespace *mnt_userns, 292 + extern int ntfs_setattr(struct mnt_idmap *idmap, 293 293 struct dentry *dentry, struct iattr *attr); 294 294 295 295 extern int __ntfs_write_inode(struct inode *vi, int sync);
+4 -4
fs/ntfs3/file.c
··· 657 657 /* 658 658 * ntfs3_setattr - inode_operations::setattr 659 659 */ 660 - int ntfs3_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 660 + int ntfs3_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 661 661 struct iattr *attr) 662 662 { 663 663 struct super_block *sb = dentry->d_sb; ··· 676 676 ia_valid = attr->ia_valid; 677 677 } 678 678 679 - err = setattr_prepare(mnt_userns, dentry, attr); 679 + err = setattr_prepare(idmap, dentry, attr); 680 680 if (err) 681 681 goto out; 682 682 ··· 704 704 inode->i_size = newsize; 705 705 } 706 706 707 - setattr_copy(mnt_userns, inode, attr); 707 + setattr_copy(idmap, inode, attr); 708 708 709 709 if (mode != inode->i_mode) { 710 - err = ntfs_acl_chmod(mnt_userns, dentry); 710 + err = ntfs_acl_chmod(mnt_idmap_owner(idmap), dentry); 711 711 if (err) 712 712 goto out; 713 713
+3 -1
fs/ntfs3/ntfs_fs.h
··· 494 494 /* Globals from file.c */ 495 495 int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path, 496 496 struct kstat *stat, u32 request_mask, u32 flags); 497 - int ntfs3_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 497 + int ntfs3_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 498 498 struct iattr *attr); 499 + void ntfs_sparse_cluster(struct inode *inode, struct page *page0, CLST vcn, 500 + CLST len); 499 501 int ntfs_file_open(struct inode *inode, struct file *file); 500 502 int ntfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 501 503 __u64 start, __u64 len);
+3 -3
fs/ocfs2/dlmfs/dlmfs.c
··· 188 188 * We do ->setattr() just to override size changes. Our size is the size 189 189 * of the LVB and nothing else. 190 190 */ 191 - static int dlmfs_file_setattr(struct user_namespace *mnt_userns, 191 + static int dlmfs_file_setattr(struct mnt_idmap *idmap, 192 192 struct dentry *dentry, struct iattr *attr) 193 193 { 194 194 int error; 195 195 struct inode *inode = d_inode(dentry); 196 196 197 197 attr->ia_valid &= ~ATTR_SIZE; 198 - error = setattr_prepare(&init_user_ns, dentry, attr); 198 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 199 199 if (error) 200 200 return error; 201 201 202 - setattr_copy(&init_user_ns, inode, attr); 202 + setattr_copy(&nop_mnt_idmap, inode, attr); 203 203 mark_inode_dirty(inode); 204 204 return 0; 205 205 }
+4 -3
fs/ocfs2/file.c
··· 1111 1111 return ret; 1112 1112 } 1113 1113 1114 - int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 1114 + int ocfs2_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 1115 1115 struct iattr *attr) 1116 1116 { 1117 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 1117 1118 int status = 0, size_change; 1118 1119 int inode_locked = 0; 1119 1120 struct inode *inode = d_inode(dentry); ··· 1143 1142 if (!(attr->ia_valid & OCFS2_VALID_ATTRS)) 1144 1143 return 0; 1145 1144 1146 - status = setattr_prepare(&init_user_ns, dentry, attr); 1145 + status = setattr_prepare(&nop_mnt_idmap, dentry, attr); 1147 1146 if (status) 1148 1147 return status; 1149 1148 ··· 1266 1265 } 1267 1266 } 1268 1267 1269 - setattr_copy(&init_user_ns, inode, attr); 1268 + setattr_copy(&nop_mnt_idmap, inode, attr); 1270 1269 mark_inode_dirty(inode); 1271 1270 1272 1271 status = ocfs2_mark_inode_dirty(handle, inode, bh);
+1 -1
fs/ocfs2/file.h
··· 49 49 u64 new_i_size, u64 zero_to); 50 50 int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh, 51 51 loff_t zero_to); 52 - int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 52 + int ocfs2_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 53 53 struct iattr *attr); 54 54 int ocfs2_getattr(struct user_namespace *mnt_userns, const struct path *path, 55 55 struct kstat *stat, u32 request_mask, unsigned int flags);
+3 -3
fs/omfs/file.c
··· 337 337 .splice_read = generic_file_splice_read, 338 338 }; 339 339 340 - static int omfs_setattr(struct user_namespace *mnt_userns, 340 + static int omfs_setattr(struct mnt_idmap *idmap, 341 341 struct dentry *dentry, struct iattr *attr) 342 342 { 343 343 struct inode *inode = d_inode(dentry); 344 344 int error; 345 345 346 - error = setattr_prepare(&init_user_ns, dentry, attr); 346 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 347 347 if (error) 348 348 return error; 349 349 ··· 356 356 omfs_truncate(inode); 357 357 } 358 358 359 - setattr_copy(&init_user_ns, inode, attr); 359 + setattr_copy(&nop_mnt_idmap, inode, attr); 360 360 mark_inode_dirty(inode); 361 361 return 0; 362 362 }
+3 -3
fs/orangefs/inode.c
··· 822 822 ORANGEFS_I(inode)->attr_uid = current_fsuid(); 823 823 ORANGEFS_I(inode)->attr_gid = current_fsgid(); 824 824 } 825 - setattr_copy(&init_user_ns, inode, iattr); 825 + setattr_copy(&nop_mnt_idmap, inode, iattr); 826 826 spin_unlock(&inode->i_lock); 827 827 mark_inode_dirty(inode); 828 828 ··· 846 846 /* 847 847 * Change attributes of an object referenced by dentry. 848 848 */ 849 - int orangefs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 849 + int orangefs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 850 850 struct iattr *iattr) 851 851 { 852 852 int ret; 853 853 gossip_debug(GOSSIP_INODE_DEBUG, "__orangefs_setattr: called on %pd\n", 854 854 dentry); 855 - ret = setattr_prepare(&init_user_ns, dentry, iattr); 855 + ret = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 856 856 if (ret) 857 857 goto out; 858 858 ret = __orangefs_setattr_mode(dentry, iattr);
+1 -1
fs/orangefs/orangefs-kernel.h
··· 362 362 363 363 int __orangefs_setattr(struct inode *, struct iattr *); 364 364 int __orangefs_setattr_mode(struct dentry *dentry, struct iattr *iattr); 365 - int orangefs_setattr(struct user_namespace *, struct dentry *, struct iattr *); 365 + int orangefs_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 366 366 367 367 int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path, 368 368 struct kstat *stat, u32 request_mask, unsigned int flags);
+3 -3
fs/overlayfs/inode.c
··· 19 19 #include "overlayfs.h" 20 20 21 21 22 - int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 22 + int ovl_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 23 23 struct iattr *attr) 24 24 { 25 25 int err; ··· 28 28 struct dentry *upperdentry; 29 29 const struct cred *old_cred; 30 30 31 - err = setattr_prepare(&init_user_ns, dentry, attr); 31 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 32 32 if (err) 33 33 return err; 34 34 ··· 677 677 !capable_wrt_inode_uidgid(&init_user_ns, inode, CAP_FSETID)) { 678 678 struct iattr iattr = { .ia_valid = ATTR_KILL_SGID }; 679 679 680 - err = ovl_setattr(&init_user_ns, dentry, &iattr); 680 + err = ovl_setattr(&nop_mnt_idmap, dentry, &iattr); 681 681 if (err) 682 682 return err; 683 683 }
+1 -1
fs/overlayfs/overlayfs.h
··· 597 597 unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry, 598 598 struct dentry *upperdentry, 599 599 unsigned int fallback); 600 - int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 600 + int ovl_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 601 601 struct iattr *attr); 602 602 int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path, 603 603 struct kstat *stat, u32 request_mask, unsigned int flags);
+3 -3
fs/proc/base.c
··· 685 685 return allowed; 686 686 } 687 687 688 - int proc_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 688 + int proc_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 689 689 struct iattr *attr) 690 690 { 691 691 int error; ··· 694 694 if (attr->ia_valid & ATTR_MODE) 695 695 return -EPERM; 696 696 697 - error = setattr_prepare(&init_user_ns, dentry, attr); 697 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 698 698 if (error) 699 699 return error; 700 700 701 - setattr_copy(&init_user_ns, inode, attr); 701 + setattr_copy(&nop_mnt_idmap, inode, attr); 702 702 mark_inode_dirty(inode); 703 703 return 0; 704 704 }
+3 -3
fs/proc/generic.c
··· 115 115 return true; 116 116 } 117 117 118 - static int proc_notify_change(struct user_namespace *mnt_userns, 118 + static int proc_notify_change(struct mnt_idmap *idmap, 119 119 struct dentry *dentry, struct iattr *iattr) 120 120 { 121 121 struct inode *inode = d_inode(dentry); 122 122 struct proc_dir_entry *de = PDE(inode); 123 123 int error; 124 124 125 - error = setattr_prepare(&init_user_ns, dentry, iattr); 125 + error = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 126 126 if (error) 127 127 return error; 128 128 129 - setattr_copy(&init_user_ns, inode, iattr); 129 + setattr_copy(&nop_mnt_idmap, inode, iattr); 130 130 mark_inode_dirty(inode); 131 131 132 132 proc_set_user(de, inode->i_uid, inode->i_gid);
+1 -1
fs/proc/internal.h
··· 164 164 extern const struct dentry_operations pid_dentry_operations; 165 165 extern int pid_getattr(struct user_namespace *, const struct path *, 166 166 struct kstat *, u32, unsigned int); 167 - extern int proc_setattr(struct user_namespace *, struct dentry *, 167 + extern int proc_setattr(struct mnt_idmap *, struct dentry *, 168 168 struct iattr *); 169 169 extern void proc_pid_evict_inode(struct proc_inode *); 170 170 extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *, umode_t);
+3 -3
fs/proc/proc_sysctl.c
··· 827 827 return error; 828 828 } 829 829 830 - static int proc_sys_setattr(struct user_namespace *mnt_userns, 830 + static int proc_sys_setattr(struct mnt_idmap *idmap, 831 831 struct dentry *dentry, struct iattr *attr) 832 832 { 833 833 struct inode *inode = d_inode(dentry); ··· 836 836 if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) 837 837 return -EPERM; 838 838 839 - error = setattr_prepare(&init_user_ns, dentry, attr); 839 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 840 840 if (error) 841 841 return error; 842 842 843 - setattr_copy(&init_user_ns, inode, attr); 843 + setattr_copy(&nop_mnt_idmap, inode, attr); 844 844 mark_inode_dirty(inode); 845 845 return 0; 846 846 }
+4 -4
fs/ramfs/file-nommu.c
··· 22 22 #include <linux/uaccess.h> 23 23 #include "internal.h" 24 24 25 - static int ramfs_nommu_setattr(struct user_namespace *, struct dentry *, struct iattr *); 25 + static int ramfs_nommu_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 26 26 static unsigned long ramfs_nommu_get_unmapped_area(struct file *file, 27 27 unsigned long addr, 28 28 unsigned long len, ··· 158 158 * handle a change of attributes 159 159 * - we're specifically interested in a change of size 160 160 */ 161 - static int ramfs_nommu_setattr(struct user_namespace *mnt_userns, 161 + static int ramfs_nommu_setattr(struct mnt_idmap *idmap, 162 162 struct dentry *dentry, struct iattr *ia) 163 163 { 164 164 struct inode *inode = d_inode(dentry); ··· 166 166 int ret = 0; 167 167 168 168 /* POSIX UID/GID verification for setting inode attributes */ 169 - ret = setattr_prepare(&init_user_ns, dentry, ia); 169 + ret = setattr_prepare(&nop_mnt_idmap, dentry, ia); 170 170 if (ret) 171 171 return ret; 172 172 ··· 186 186 } 187 187 } 188 188 189 - setattr_copy(&init_user_ns, inode, ia); 189 + setattr_copy(&nop_mnt_idmap, inode, ia); 190 190 out: 191 191 ia->ia_valid = old_ia_valid; 192 192 return ret;
+5 -5
fs/reiserfs/inode.c
··· 3262 3262 return ret; 3263 3263 } 3264 3264 3265 - int reiserfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 3265 + int reiserfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 3266 3266 struct iattr *attr) 3267 3267 { 3268 3268 struct inode *inode = d_inode(dentry); 3269 3269 unsigned int ia_valid; 3270 3270 int error; 3271 3271 3272 - error = setattr_prepare(&init_user_ns, dentry, attr); 3272 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 3273 3273 if (error) 3274 3274 return error; 3275 3275 3276 3276 /* must be turned off for recursive notify_change calls */ 3277 3277 ia_valid = attr->ia_valid &= ~(ATTR_KILL_SUID|ATTR_KILL_SGID); 3278 3278 3279 - if (is_quota_modification(mnt_userns, inode, attr)) { 3279 + if (is_quota_modification(&init_user_ns, inode, attr)) { 3280 3280 error = dquot_initialize(inode); 3281 3281 if (error) 3282 3282 return error; ··· 3359 3359 reiserfs_write_unlock(inode->i_sb); 3360 3360 if (error) 3361 3361 goto out; 3362 - error = dquot_transfer(mnt_userns, inode, attr); 3362 + error = dquot_transfer(&init_user_ns, inode, attr); 3363 3363 reiserfs_write_lock(inode->i_sb); 3364 3364 if (error) { 3365 3365 journal_end(&th); ··· 3398 3398 } 3399 3399 3400 3400 if (!error) { 3401 - setattr_copy(&init_user_ns, inode, attr); 3401 + setattr_copy(&nop_mnt_idmap, inode, attr); 3402 3402 mark_inode_dirty(inode); 3403 3403 } 3404 3404
+1 -1
fs/reiserfs/reiserfs.h
··· 3100 3100 } 3101 3101 3102 3102 void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode); 3103 - int reiserfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 3103 + int reiserfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 3104 3104 struct iattr *attr); 3105 3105 3106 3106 int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len);
+2 -2
fs/reiserfs/xattr.c
··· 352 352 * ATTR_MODE is set. 353 353 */ 354 354 attrs->ia_valid &= (ATTR_UID|ATTR_GID); 355 - err = reiserfs_setattr(&init_user_ns, dentry, attrs); 355 + err = reiserfs_setattr(&nop_mnt_idmap, dentry, attrs); 356 356 attrs->ia_valid = ia_valid; 357 357 358 358 return err; ··· 597 597 inode_lock_nested(d_inode(dentry), I_MUTEX_XATTR); 598 598 inode_dio_wait(d_inode(dentry)); 599 599 600 - err = reiserfs_setattr(&init_user_ns, dentry, &newattrs); 600 + err = reiserfs_setattr(&nop_mnt_idmap, dentry, &newattrs); 601 601 inode_unlock(d_inode(dentry)); 602 602 } else 603 603 update_ctime(inode);
+3 -3
fs/sysv/file.c
··· 29 29 .splice_read = generic_file_splice_read, 30 30 }; 31 31 32 - static int sysv_setattr(struct user_namespace *mnt_userns, 32 + static int sysv_setattr(struct mnt_idmap *idmap, 33 33 struct dentry *dentry, struct iattr *attr) 34 34 { 35 35 struct inode *inode = d_inode(dentry); 36 36 int error; 37 37 38 - error = setattr_prepare(&init_user_ns, dentry, attr); 38 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 39 39 if (error) 40 40 return error; 41 41 ··· 48 48 sysv_truncate(inode); 49 49 } 50 50 51 - setattr_copy(&init_user_ns, inode, attr); 51 + setattr_copy(&nop_mnt_idmap, inode, attr); 52 52 mark_inode_dirty(inode); 53 53 return 0; 54 54 }
+2 -2
fs/ubifs/file.c
··· 1258 1258 return err; 1259 1259 } 1260 1260 1261 - int ubifs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 1261 + int ubifs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 1262 1262 struct iattr *attr) 1263 1263 { 1264 1264 int err; ··· 1267 1267 1268 1268 dbg_gen("ino %lu, mode %#x, ia_valid %#x", 1269 1269 inode->i_ino, inode->i_mode, attr->ia_valid); 1270 - err = setattr_prepare(&init_user_ns, dentry, attr); 1270 + err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 1271 1271 if (err) 1272 1272 return err; 1273 1273
+1 -1
fs/ubifs/ubifs.h
··· 2020 2020 2021 2021 /* file.c */ 2022 2022 int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync); 2023 - int ubifs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 2023 + int ubifs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 2024 2024 struct iattr *attr); 2025 2025 int ubifs_update_time(struct inode *inode, struct timespec64 *time, int flags); 2026 2026
+3 -3
fs/udf/file.c
··· 256 256 .llseek = generic_file_llseek, 257 257 }; 258 258 259 - static int udf_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 259 + static int udf_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 260 260 struct iattr *attr) 261 261 { 262 262 struct inode *inode = d_inode(dentry); 263 263 struct super_block *sb = inode->i_sb; 264 264 int error; 265 265 266 - error = setattr_prepare(&init_user_ns, dentry, attr); 266 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 267 267 if (error) 268 268 return error; 269 269 ··· 286 286 if (attr->ia_valid & ATTR_MODE) 287 287 udf_update_extra_perms(inode, attr->ia_mode); 288 288 289 - setattr_copy(&init_user_ns, inode, attr); 289 + setattr_copy(&nop_mnt_idmap, inode, attr); 290 290 mark_inode_dirty(inode); 291 291 return 0; 292 292 }
+3 -3
fs/ufs/inode.c
··· 1212 1212 return err; 1213 1213 } 1214 1214 1215 - int ufs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 1215 + int ufs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 1216 1216 struct iattr *attr) 1217 1217 { 1218 1218 struct inode *inode = d_inode(dentry); 1219 1219 unsigned int ia_valid = attr->ia_valid; 1220 1220 int error; 1221 1221 1222 - error = setattr_prepare(&init_user_ns, dentry, attr); 1222 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 1223 1223 if (error) 1224 1224 return error; 1225 1225 ··· 1229 1229 return error; 1230 1230 } 1231 1231 1232 - setattr_copy(&init_user_ns, inode, attr); 1232 + setattr_copy(&nop_mnt_idmap, inode, attr); 1233 1233 mark_inode_dirty(inode); 1234 1234 return 0; 1235 1235 }
+1 -1
fs/ufs/ufs.h
··· 123 123 extern int ufs_write_inode (struct inode *, struct writeback_control *); 124 124 extern int ufs_sync_inode (struct inode *); 125 125 extern void ufs_evict_inode (struct inode *); 126 - extern int ufs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 126 + extern int ufs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 127 127 struct iattr *attr); 128 128 129 129 /* namei.c */
+1 -1
fs/vboxsf/utils.c
··· 256 256 return 0; 257 257 } 258 258 259 - int vboxsf_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 259 + int vboxsf_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 260 260 struct iattr *iattr) 261 261 { 262 262 struct vboxsf_inode *sf_i = VBOXSF_I(d_inode(dentry));
+1 -1
fs/vboxsf/vfsmod.h
··· 100 100 int vboxsf_getattr(struct user_namespace *mnt_userns, const struct path *path, 101 101 struct kstat *kstat, u32 request_mask, 102 102 unsigned int query_flags); 103 - int vboxsf_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 103 + int vboxsf_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 104 104 struct iattr *iattr); 105 105 struct shfl_string *vboxsf_path_from_dentry(struct vboxsf_sbi *sbi, 106 106 struct dentry *dentry);
+1 -1
fs/xfs/xfs_file.c
··· 1047 1047 1048 1048 iattr.ia_valid = ATTR_SIZE; 1049 1049 iattr.ia_size = new_size; 1050 - error = xfs_vn_setattr_size(file_mnt_user_ns(file), 1050 + error = xfs_vn_setattr_size(file_mnt_idmap(file), 1051 1051 file_dentry(file), &iattr); 1052 1052 if (error) 1053 1053 goto out_unlock;
+15 -14
fs/xfs/xfs_iops.c
··· 627 627 628 628 static int 629 629 xfs_vn_change_ok( 630 - struct user_namespace *mnt_userns, 630 + struct mnt_idmap *idmap, 631 631 struct dentry *dentry, 632 632 struct iattr *iattr) 633 633 { ··· 639 639 if (xfs_is_shutdown(mp)) 640 640 return -EIO; 641 641 642 - return setattr_prepare(mnt_userns, dentry, iattr); 642 + return setattr_prepare(idmap, dentry, iattr); 643 643 } 644 644 645 645 /* ··· 650 650 */ 651 651 static int 652 652 xfs_setattr_nonsize( 653 - struct user_namespace *mnt_userns, 653 + struct mnt_idmap *idmap, 654 654 struct dentry *dentry, 655 655 struct xfs_inode *ip, 656 656 struct iattr *iattr) ··· 664 664 kgid_t gid = GLOBAL_ROOT_GID; 665 665 struct xfs_dquot *udqp = NULL, *gdqp = NULL; 666 666 struct xfs_dquot *old_udqp = NULL, *old_gdqp = NULL; 667 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 667 668 668 669 ASSERT((mask & ATTR_SIZE) == 0); 669 670 ··· 731 730 old_gdqp = xfs_qm_vop_chown(tp, ip, &ip->i_gdquot, gdqp); 732 731 } 733 732 734 - setattr_copy(mnt_userns, inode, iattr); 733 + setattr_copy(idmap, inode, iattr); 735 734 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 736 735 737 736 XFS_STATS_INC(mp, xs_ig_attrchg); ··· 780 779 */ 781 780 STATIC int 782 781 xfs_setattr_size( 783 - struct user_namespace *mnt_userns, 782 + struct mnt_idmap *idmap, 784 783 struct dentry *dentry, 785 784 struct xfs_inode *ip, 786 785 struct iattr *iattr) ··· 813 812 * Use the regular setattr path to update the timestamps. 814 813 */ 815 814 iattr->ia_valid &= ~ATTR_SIZE; 816 - return xfs_setattr_nonsize(mnt_userns, dentry, ip, iattr); 815 + return xfs_setattr_nonsize(idmap, dentry, ip, iattr); 817 816 } 818 817 819 818 /* ··· 957 956 } 958 957 959 958 ASSERT(!(iattr->ia_valid & (ATTR_UID | ATTR_GID))); 960 - setattr_copy(mnt_userns, inode, iattr); 959 + setattr_copy(idmap, inode, iattr); 961 960 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 962 961 963 962 XFS_STATS_INC(mp, xs_ig_attrchg); ··· 978 977 979 978 int 980 979 xfs_vn_setattr_size( 981 - struct user_namespace *mnt_userns, 980 + struct mnt_idmap *idmap, 982 981 struct dentry *dentry, 983 982 struct iattr *iattr) 984 983 { ··· 987 986 988 987 trace_xfs_setattr(ip); 989 988 990 - error = xfs_vn_change_ok(mnt_userns, dentry, iattr); 989 + error = xfs_vn_change_ok(idmap, dentry, iattr); 991 990 if (error) 992 991 return error; 993 - return xfs_setattr_size(mnt_userns, dentry, ip, iattr); 992 + return xfs_setattr_size(idmap, dentry, ip, iattr); 994 993 } 995 994 996 995 STATIC int 997 996 xfs_vn_setattr( 998 - struct user_namespace *mnt_userns, 997 + struct mnt_idmap *idmap, 999 998 struct dentry *dentry, 1000 999 struct iattr *iattr) 1001 1000 { ··· 1015 1014 return error; 1016 1015 } 1017 1016 1018 - error = xfs_vn_setattr_size(mnt_userns, dentry, iattr); 1017 + error = xfs_vn_setattr_size(idmap, dentry, iattr); 1019 1018 xfs_iunlock(ip, XFS_MMAPLOCK_EXCL); 1020 1019 } else { 1021 1020 trace_xfs_setattr(ip); 1022 1021 1023 - error = xfs_vn_change_ok(mnt_userns, dentry, iattr); 1022 + error = xfs_vn_change_ok(idmap, dentry, iattr); 1024 1023 if (!error) 1025 - error = xfs_setattr_nonsize(mnt_userns, dentry, ip, iattr); 1024 + error = xfs_setattr_nonsize(idmap, dentry, ip, iattr); 1026 1025 } 1027 1026 1028 1027 return error;
+1 -1
fs/xfs/xfs_iops.h
··· 13 13 14 14 extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); 15 15 16 - int xfs_vn_setattr_size(struct user_namespace *mnt_userns, 16 + int xfs_vn_setattr_size(struct mnt_idmap *idmap, 17 17 struct dentry *dentry, struct iattr *vap); 18 18 19 19 int xfs_inode_init_security(struct inode *inode, struct inode *dir,
+1 -1
fs/xfs/xfs_pnfs.c
··· 322 322 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 323 323 324 324 ASSERT(!(iattr->ia_valid & (ATTR_UID | ATTR_GID))); 325 - setattr_copy(&init_user_ns, inode, iattr); 325 + setattr_copy(&nop_mnt_idmap, inode, iattr); 326 326 if (update_isize) { 327 327 i_size_write(inode, iattr->ia_size); 328 328 ip->i_disk_size = iattr->ia_size;
+4 -4
fs/zonefs/super.c
··· 600 600 return ret; 601 601 } 602 602 603 - static int zonefs_inode_setattr(struct user_namespace *mnt_userns, 603 + static int zonefs_inode_setattr(struct mnt_idmap *idmap, 604 604 struct dentry *dentry, struct iattr *iattr) 605 605 { 606 606 struct inode *inode = d_inode(dentry); ··· 609 609 if (unlikely(IS_IMMUTABLE(inode))) 610 610 return -EPERM; 611 611 612 - ret = setattr_prepare(&init_user_ns, dentry, iattr); 612 + ret = setattr_prepare(&nop_mnt_idmap, dentry, iattr); 613 613 if (ret) 614 614 return ret; 615 615 ··· 626 626 !uid_eq(iattr->ia_uid, inode->i_uid)) || 627 627 ((iattr->ia_valid & ATTR_GID) && 628 628 !gid_eq(iattr->ia_gid, inode->i_gid))) { 629 - ret = dquot_transfer(mnt_userns, inode, iattr); 629 + ret = dquot_transfer(&init_user_ns, inode, iattr); 630 630 if (ret) 631 631 return ret; 632 632 } ··· 637 637 return ret; 638 638 } 639 639 640 - setattr_copy(&init_user_ns, inode, iattr); 640 + setattr_copy(&nop_mnt_idmap, inode, iattr); 641 641 642 642 return 0; 643 643 }
+2 -2
include/linux/evm.h
··· 21 21 void *xattr_value, 22 22 size_t xattr_value_len, 23 23 struct integrity_iint_cache *iint); 24 - extern int evm_inode_setattr(struct user_namespace *mnt_userns, 24 + extern int evm_inode_setattr(struct mnt_idmap *idmap, 25 25 struct dentry *dentry, struct iattr *attr); 26 26 extern void evm_inode_post_setattr(struct dentry *dentry, int ia_valid); 27 27 extern int evm_inode_setxattr(struct user_namespace *mnt_userns, ··· 90 90 } 91 91 #endif 92 92 93 - static inline int evm_inode_setattr(struct user_namespace *mnt_userns, 93 + static inline int evm_inode_setattr(struct mnt_idmap *idmap, 94 94 struct dentry *dentry, struct iattr *attr) 95 95 { 96 96 return 0;
+4 -5
include/linux/fs.h
··· 2152 2152 umode_t,dev_t); 2153 2153 int (*rename) (struct user_namespace *, struct inode *, struct dentry *, 2154 2154 struct inode *, struct dentry *, unsigned int); 2155 - int (*setattr) (struct user_namespace *, struct dentry *, 2156 - struct iattr *); 2155 + int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *); 2157 2156 int (*getattr) (struct user_namespace *, const struct path *, 2158 2157 struct kstat *, u32, unsigned int); 2159 2158 ssize_t (*listxattr) (struct dentry *, char *, size_t); ··· 3312 3313 extern int dcache_dir_close(struct inode *, struct file *); 3313 3314 extern loff_t dcache_dir_lseek(struct file *, loff_t, int); 3314 3315 extern int dcache_readdir(struct file *, struct dir_context *); 3315 - extern int simple_setattr(struct user_namespace *, struct dentry *, 3316 + extern int simple_setattr(struct mnt_idmap *, struct dentry *, 3316 3317 struct iattr *); 3317 3318 extern int simple_getattr(struct user_namespace *, const struct path *, 3318 3319 struct kstat *, u32, unsigned int); ··· 3367 3368 3368 3369 int may_setattr(struct user_namespace *mnt_userns, struct inode *inode, 3369 3370 unsigned int ia_valid); 3370 - int setattr_prepare(struct user_namespace *, struct dentry *, struct iattr *); 3371 + int setattr_prepare(struct mnt_idmap *, struct dentry *, struct iattr *); 3371 3372 extern int inode_newsize_ok(const struct inode *, loff_t offset); 3372 - void setattr_copy(struct user_namespace *, struct inode *inode, 3373 + void setattr_copy(struct mnt_idmap *, struct inode *inode, 3373 3374 const struct iattr *attr); 3374 3375 3375 3376 extern int file_update_time(struct file *file);
+1 -1
include/linux/nfs_fs.h
··· 405 405 extern bool nfs_mapping_need_revalidate_inode(struct inode *inode); 406 406 extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping); 407 407 extern int nfs_revalidate_mapping_rcu(struct inode *inode); 408 - extern int nfs_setattr(struct user_namespace *, struct dentry *, struct iattr *); 408 + extern int nfs_setattr(struct mnt_idmap *, struct dentry *, struct iattr *); 409 409 extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, struct nfs_fattr *); 410 410 extern void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr); 411 411 extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);
+2 -2
include/linux/security.h
··· 356 356 int security_inode_follow_link(struct dentry *dentry, struct inode *inode, 357 357 bool rcu); 358 358 int security_inode_permission(struct inode *inode, int mask); 359 - int security_inode_setattr(struct user_namespace *mnt_userns, 359 + int security_inode_setattr(struct mnt_idmap *idmap, 360 360 struct dentry *dentry, struct iattr *attr); 361 361 int security_inode_getattr(const struct path *path); 362 362 int security_inode_setxattr(struct user_namespace *mnt_userns, ··· 862 862 return 0; 863 863 } 864 864 865 - static inline int security_inode_setattr(struct user_namespace *mnt_userns, 865 + static inline int security_inode_setattr(struct mnt_idmap *idmap, 866 866 struct dentry *dentry, 867 867 struct iattr *attr) 868 868 {
+2 -2
mm/secretmem.c
··· 162 162 .migrate_folio = secretmem_migrate_folio, 163 163 }; 164 164 165 - static int secretmem_setattr(struct user_namespace *mnt_userns, 165 + static int secretmem_setattr(struct mnt_idmap *idmap, 166 166 struct dentry *dentry, struct iattr *iattr) 167 167 { 168 168 struct inode *inode = d_inode(dentry); ··· 175 175 if ((ia_valid & ATTR_SIZE) && inode->i_size) 176 176 ret = -EINVAL; 177 177 else 178 - ret = simple_setattr(mnt_userns, dentry, iattr); 178 + ret = simple_setattr(idmap, dentry, iattr); 179 179 180 180 filemap_invalidate_unlock(mapping); 181 181
+3 -3
mm/shmem.c
··· 1082 1082 return 0; 1083 1083 } 1084 1084 1085 - static int shmem_setattr(struct user_namespace *mnt_userns, 1085 + static int shmem_setattr(struct mnt_idmap *idmap, 1086 1086 struct dentry *dentry, struct iattr *attr) 1087 1087 { 1088 1088 struct inode *inode = d_inode(dentry); ··· 1091 1091 bool update_mtime = false; 1092 1092 bool update_ctime = true; 1093 1093 1094 - error = setattr_prepare(&init_user_ns, dentry, attr); 1094 + error = setattr_prepare(&nop_mnt_idmap, dentry, attr); 1095 1095 if (error) 1096 1096 return error; 1097 1097 ··· 1129 1129 } 1130 1130 } 1131 1131 1132 - setattr_copy(&init_user_ns, inode, attr); 1132 + setattr_copy(&nop_mnt_idmap, inode, attr); 1133 1133 if (attr->ia_valid & ATTR_MODE) 1134 1134 error = posix_acl_chmod(&init_user_ns, dentry, inode->i_mode); 1135 1135 if (!error && update_ctime) {
+2 -2
net/socket.c
··· 589 589 return used; 590 590 } 591 591 592 - static int sockfs_setattr(struct user_namespace *mnt_userns, 592 + static int sockfs_setattr(struct mnt_idmap *idmap, 593 593 struct dentry *dentry, struct iattr *iattr) 594 594 { 595 - int err = simple_setattr(&init_user_ns, dentry, iattr); 595 + int err = simple_setattr(&nop_mnt_idmap, dentry, iattr); 596 596 597 597 if (!err && (iattr->ia_valid & ATTR_UID)) { 598 598 struct socket *sock = SOCKET_I(d_inode(dentry));
+4 -3
security/integrity/evm/evm_main.c
··· 779 779 evm_update_evmxattr(dentry, xattr_name, NULL, 0); 780 780 } 781 781 782 - static int evm_attr_change(struct user_namespace *mnt_userns, 782 + static int evm_attr_change(struct mnt_idmap *idmap, 783 783 struct dentry *dentry, struct iattr *attr) 784 784 { 785 785 struct inode *inode = d_backing_inode(dentry); 786 + struct user_namespace *mnt_userns = mnt_idmap_owner(idmap); 786 787 unsigned int ia_valid = attr->ia_valid; 787 788 788 789 if (!i_uid_needs_update(mnt_userns, attr, inode) && ··· 801 800 * Permit update of file attributes when files have a valid EVM signature, 802 801 * except in the case of them having an immutable portable signature. 803 802 */ 804 - int evm_inode_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 803 + int evm_inode_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 805 804 struct iattr *attr) 806 805 { 807 806 unsigned int ia_valid = attr->ia_valid; ··· 828 827 return 0; 829 828 830 829 if (evm_status == INTEGRITY_PASS_IMMUTABLE && 831 - !evm_attr_change(mnt_userns, dentry, attr)) 830 + !evm_attr_change(idmap, dentry, attr)) 832 831 return 0; 833 832 834 833 integrity_audit_msg(AUDIT_INTEGRITY_METADATA, d_backing_inode(dentry),
+1 -1
security/integrity/evm/evm_secfs.c
··· 228 228 newattrs.ia_valid = ATTR_MODE; 229 229 inode = evm_xattrs->d_inode; 230 230 inode_lock(inode); 231 - err = simple_setattr(&init_user_ns, evm_xattrs, &newattrs); 231 + err = simple_setattr(&nop_mnt_idmap, evm_xattrs, &newattrs); 232 232 inode_unlock(inode); 233 233 if (!err) 234 234 err = count;
+2 -2
security/security.c
··· 1354 1354 return call_int_hook(inode_permission, 0, inode, mask); 1355 1355 } 1356 1356 1357 - int security_inode_setattr(struct user_namespace *mnt_userns, 1357 + int security_inode_setattr(struct mnt_idmap *idmap, 1358 1358 struct dentry *dentry, struct iattr *attr) 1359 1359 { 1360 1360 int ret; ··· 1364 1364 ret = call_int_hook(inode_setattr, 0, dentry, attr); 1365 1365 if (ret) 1366 1366 return ret; 1367 - return evm_inode_setattr(mnt_userns, dentry, attr); 1367 + return evm_inode_setattr(idmap, dentry, attr); 1368 1368 } 1369 1369 EXPORT_SYMBOL_GPL(security_inode_setattr); 1370 1370