Lines Matching refs:idmap

291 static int check_acl(struct mnt_idmap *idmap,  in check_acl()  argument
304 return posix_acl_permission(idmap, inode, acl, mask); in check_acl()
311 int error = posix_acl_permission(idmap, inode, acl, mask); in check_acl()
336 static int acl_permission_check(struct mnt_idmap *idmap, in acl_permission_check() argument
343 vfsuid = i_uid_into_vfsuid(idmap, inode); in acl_permission_check()
352 int error = check_acl(idmap, inode, mask); in acl_permission_check()
366 vfsgid_t vfsgid = i_gid_into_vfsgid(idmap, inode); in acl_permission_check()
397 int generic_permission(struct mnt_idmap *idmap, struct inode *inode, in generic_permission() argument
405 ret = acl_permission_check(idmap, inode, mask); in generic_permission()
412 if (capable_wrt_inode_uidgid(idmap, inode, in generic_permission()
415 if (capable_wrt_inode_uidgid(idmap, inode, in generic_permission()
426 if (capable_wrt_inode_uidgid(idmap, inode, in generic_permission()
435 if (capable_wrt_inode_uidgid(idmap, inode, in generic_permission()
454 static inline int do_inode_permission(struct mnt_idmap *idmap, in do_inode_permission() argument
459 return inode->i_op->permission(idmap, inode, mask); in do_inode_permission()
466 return generic_permission(idmap, inode, mask); in do_inode_permission()
501 int inode_permission(struct mnt_idmap *idmap, in inode_permission() argument
522 if (HAS_UNMAPPED_ID(idmap, inode)) in inode_permission()
526 retval = do_inode_permission(idmap, inode, mask); in inode_permission()
1098 struct mnt_idmap *idmap; in may_follow_link() local
1104 idmap = mnt_idmap(nd->path.mnt); in may_follow_link()
1105 vfsuid = i_uid_into_vfsuid(idmap, inode); in may_follow_link()
1139 static bool safe_hardlink_source(struct mnt_idmap *idmap, in safe_hardlink_source() argument
1157 if (inode_permission(idmap, inode, MAY_READ | MAY_WRITE)) in safe_hardlink_source()
1182 int may_linkat(struct mnt_idmap *idmap, const struct path *link) in may_linkat() argument
1187 if (!vfsuid_valid(i_uid_into_vfsuid(idmap, inode)) || in may_linkat()
1188 !vfsgid_valid(i_gid_into_vfsgid(idmap, inode))) in may_linkat()
1197 if (safe_hardlink_source(idmap, inode) || in may_linkat()
1198 inode_owner_or_capable(idmap, inode)) in may_linkat()
1232 static int may_create_in_sticky(struct mnt_idmap *idmap, in may_create_in_sticky() argument
1241 vfsuid_eq(i_uid_into_vfsuid(idmap, inode), dir_vfsuid) || in may_create_in_sticky()
1242 vfsuid_eq_kuid(i_uid_into_vfsuid(idmap, inode), current_fsuid())) in may_create_in_sticky()
1708 static inline int may_lookup(struct mnt_idmap *idmap, in may_lookup() argument
1712 int err = inode_permission(idmap, nd->inode, MAY_EXEC|MAY_NOT_BLOCK); in may_lookup()
1716 return inode_permission(idmap, nd->inode, MAY_EXEC); in may_lookup()
2257 struct mnt_idmap *idmap; in link_path_walk() local
2262 idmap = mnt_idmap(nd->path.mnt); in link_path_walk()
2263 err = may_lookup(idmap, nd); in link_path_walk()
2311 nd->dir_vfsuid = i_uid_into_vfsuid(idmap, nd->inode); in link_path_walk()
2626 static int lookup_one_common(struct mnt_idmap *idmap, in lookup_one_common() argument
2656 return inode_permission(idmap, base->d_inode, MAY_EXEC); in lookup_one_common()
2728 struct dentry *lookup_one(struct mnt_idmap *idmap, const char *name, in lookup_one() argument
2737 err = lookup_one_common(idmap, name, base, len, &this); in lookup_one()
2759 struct dentry *lookup_one_unlocked(struct mnt_idmap *idmap, in lookup_one_unlocked() argument
2767 err = lookup_one_common(idmap, name, base, len, &this); in lookup_one_unlocked()
2798 struct dentry *lookup_one_positive_unlocked(struct mnt_idmap *idmap, in lookup_one_positive_unlocked() argument
2802 struct dentry *ret = lookup_one_unlocked(idmap, name, base, len); in lookup_one_positive_unlocked()
2884 int __check_sticky(struct mnt_idmap *idmap, struct inode *dir, in __check_sticky() argument
2889 if (vfsuid_eq_kuid(i_uid_into_vfsuid(idmap, inode), fsuid)) in __check_sticky()
2891 if (vfsuid_eq_kuid(i_uid_into_vfsuid(idmap, dir), fsuid)) in __check_sticky()
2893 return !capable_wrt_inode_uidgid(idmap, inode, CAP_FOWNER); in __check_sticky()
2917 static int may_delete(struct mnt_idmap *idmap, struct inode *dir, in may_delete() argument
2930 if (!vfsuid_valid(i_uid_into_vfsuid(idmap, inode)) || in may_delete()
2931 !vfsgid_valid(i_gid_into_vfsgid(idmap, inode))) in may_delete()
2936 error = inode_permission(idmap, dir, MAY_WRITE | MAY_EXEC); in may_delete()
2942 if (check_sticky(idmap, dir, inode) || IS_APPEND(inode) || in may_delete()
2944 HAS_UNMAPPED_ID(idmap, inode)) in may_delete()
2969 static inline int may_create(struct mnt_idmap *idmap, in may_create() argument
2977 if (!fsuidgid_has_mapping(dir->i_sb, idmap)) in may_create()
2980 return inode_permission(idmap, dir, MAY_WRITE | MAY_EXEC); in may_create()
3069 static inline umode_t vfs_prepare_mode(struct mnt_idmap *idmap, in vfs_prepare_mode() argument
3073 mode = mode_strip_sgid(idmap, dir, mode); in vfs_prepare_mode()
3102 int vfs_create(struct mnt_idmap *idmap, struct inode *dir, in vfs_create() argument
3107 error = may_create(idmap, dir, dentry); in vfs_create()
3114 mode = vfs_prepare_mode(idmap, dir, mode, S_IALLUGO, S_IFREG); in vfs_create()
3118 error = dir->i_op->create(idmap, dir, dentry, mode, want_excl); in vfs_create()
3152 static int may_open(struct mnt_idmap *idmap, const struct path *path, in may_open() argument
3188 error = inode_permission(idmap, inode, MAY_OPEN | acc_mode); in may_open()
3203 if (flag & O_NOATIME && !inode_owner_or_capable(idmap, inode)) in may_open()
3209 static int handle_truncate(struct mnt_idmap *idmap, struct file *filp) in handle_truncate() argument
3219 error = do_truncate(idmap, path->dentry, 0, in handle_truncate()
3234 static int may_o_create(struct mnt_idmap *idmap, in may_o_create() argument
3242 if (!fsuidgid_has_mapping(dir->dentry->d_sb, idmap)) in may_o_create()
3245 error = inode_permission(idmap, dir->dentry->d_inode, in may_o_create()
3325 struct mnt_idmap *idmap; in lookup_open() local
3373 idmap = mnt_idmap(nd->path.mnt); in lookup_open()
3377 mode = vfs_prepare_mode(idmap, dir->d_inode, mode, mode, mode); in lookup_open()
3379 create_error = may_o_create(idmap, &nd->path, in lookup_open()
3416 error = dir_inode->i_op->create(idmap, dir_inode, dentry, in lookup_open()
3519 struct mnt_idmap *idmap; in do_open() local
3532 idmap = mnt_idmap(nd->path.mnt); in do_open()
3538 error = may_create_in_sticky(idmap, nd, in do_open()
3558 error = may_open(idmap, &nd->path, acc_mode, open_flag); in do_open()
3564 error = handle_truncate(idmap, file); in do_open()
3589 static int vfs_tmpfile(struct mnt_idmap *idmap, in vfs_tmpfile() argument
3600 error = inode_permission(idmap, dir, MAY_WRITE | MAY_EXEC); in vfs_tmpfile()
3610 mode = vfs_prepare_mode(idmap, dir, mode, mode, mode); in vfs_tmpfile()
3611 error = dir->i_op->tmpfile(idmap, dir, file, mode); in vfs_tmpfile()
3616 error = may_open(idmap, &file->f_path, 0, file->f_flags); in vfs_tmpfile()
3625 ima_post_create_tmpfile(idmap, inode); in vfs_tmpfile()
3641 struct file *vfs_tmpfile_open(struct mnt_idmap *idmap, in vfs_tmpfile_open() argument
3650 error = vfs_tmpfile(idmap, parentpath, file, mode); in vfs_tmpfile_open()
3891 int vfs_mknod(struct mnt_idmap *idmap, struct inode *dir, in vfs_mknod() argument
3895 int error = may_create(idmap, dir, dentry); in vfs_mknod()
3907 mode = vfs_prepare_mode(idmap, dir, mode, mode, mode); in vfs_mknod()
3916 error = dir->i_op->mknod(idmap, dir, dentry, mode, dev); in vfs_mknod()
3943 struct mnt_idmap *idmap; in do_mknodat() local
3963 idmap = mnt_idmap(path.mnt); in do_mknodat()
3966 error = vfs_create(idmap, path.dentry->d_inode, in do_mknodat()
3969 ima_post_path_mknod(idmap, dentry); in do_mknodat()
3972 error = vfs_mknod(idmap, path.dentry->d_inode, in do_mknodat()
3976 error = vfs_mknod(idmap, path.dentry->d_inode, in do_mknodat()
4017 int vfs_mkdir(struct mnt_idmap *idmap, struct inode *dir, in vfs_mkdir() argument
4023 error = may_create(idmap, dir, dentry); in vfs_mkdir()
4030 mode = vfs_prepare_mode(idmap, dir, mode, S_IRWXUGO | S_ISVTX, 0); in vfs_mkdir()
4038 error = dir->i_op->mkdir(idmap, dir, dentry, mode); in vfs_mkdir()
4098 int vfs_rmdir(struct mnt_idmap *idmap, struct inode *dir, in vfs_rmdir() argument
4101 int error = may_delete(idmap, dir, dentry, 1); in vfs_rmdir()
4227 int vfs_unlink(struct mnt_idmap *idmap, struct inode *dir, in vfs_unlink() argument
4231 int error = may_delete(idmap, dir, dentry, 0); in vfs_unlink()
4382 int vfs_symlink(struct mnt_idmap *idmap, struct inode *dir, in vfs_symlink() argument
4387 error = may_create(idmap, dir, dentry); in vfs_symlink()
4398 error = dir->i_op->symlink(idmap, dir, dentry, oldname); in vfs_symlink()
4474 int vfs_link(struct dentry *old_dentry, struct mnt_idmap *idmap, in vfs_link() argument
4485 error = may_create(idmap, dir, new_dentry); in vfs_link()
4502 if (HAS_UNMAPPED_ID(idmap, inode)) in vfs_link()
4549 struct mnt_idmap *idmap; in do_linkat() local
4586 idmap = mnt_idmap(new_path.mnt); in do_linkat()
4587 error = may_linkat(idmap, &old_path); in do_linkat()
4593 error = vfs_link(old_path.dentry, idmap, new_path.dentry->d_inode, in do_linkat()