Lines Matching refs:kattr
3967 static unsigned int recalc_flags(struct mount_kattr *kattr, struct mount *mnt) in recalc_flags() argument
3972 flags &= ~kattr->attr_clr; in recalc_flags()
3974 flags |= kattr->attr_set; in recalc_flags()
3979 static int can_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt) in can_idmap_mount() argument
3984 if (!kattr->mnt_userns) in can_idmap_mount()
3991 if (kattr->mnt_userns == fs_userns) in can_idmap_mount()
4026 static inline bool mnt_allow_writers(const struct mount_kattr *kattr, in mnt_allow_writers() argument
4029 return (!(kattr->attr_set & MNT_READONLY) || in mnt_allow_writers()
4031 !kattr->mnt_userns; in mnt_allow_writers()
4034 static int mount_setattr_prepare(struct mount_kattr *kattr, struct mount *mnt) in mount_setattr_prepare() argument
4040 if (!can_change_locked_flags(m, recalc_flags(kattr, m))) { in mount_setattr_prepare()
4045 err = can_idmap_mount(kattr, m); in mount_setattr_prepare()
4049 if (!mnt_allow_writers(kattr, m)) { in mount_setattr_prepare()
4055 if (!kattr->recurse) in mount_setattr_prepare()
4083 static void do_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt) in do_idmap_mount() argument
4087 if (!kattr->mnt_userns) in do_idmap_mount()
4096 mnt_userns = get_user_ns(kattr->mnt_userns); in do_idmap_mount()
4108 static void mount_setattr_commit(struct mount_kattr *kattr, struct mount *mnt) in mount_setattr_commit() argument
4115 do_idmap_mount(kattr, m); in mount_setattr_commit()
4116 flags = recalc_flags(kattr, m); in mount_setattr_commit()
4123 if (kattr->propagation) in mount_setattr_commit()
4124 change_mnt_propagation(m, kattr->propagation); in mount_setattr_commit()
4125 if (!kattr->recurse) in mount_setattr_commit()
4131 static int do_mount_setattr(struct path *path, struct mount_kattr *kattr) in do_mount_setattr() argument
4139 if (kattr->propagation) { in do_mount_setattr()
4145 if (kattr->propagation == MS_SHARED) { in do_mount_setattr()
4146 err = invent_group_ids(mnt, kattr->recurse); in do_mount_setattr()
4175 err = mount_setattr_prepare(kattr, mnt); in do_mount_setattr()
4177 mount_setattr_commit(kattr, mnt); in do_mount_setattr()
4182 if (kattr->propagation) { in do_mount_setattr()
4192 struct mount_kattr *kattr, unsigned int flags) in build_mount_idmapped() argument
4248 kattr->mnt_userns = get_user_ns(mnt_userns); in build_mount_idmapped()
4256 struct mount_kattr *kattr, unsigned int flags) in build_mount_kattr() argument
4267 *kattr = (struct mount_kattr) { in build_mount_kattr()
4276 kattr->propagation = attr->propagation; in build_mount_kattr()
4281 kattr->attr_set = attr_flags_to_mnt_flags(attr->attr_set); in build_mount_kattr()
4282 kattr->attr_clr = attr_flags_to_mnt_flags(attr->attr_clr); in build_mount_kattr()
4301 kattr->attr_clr |= MNT_RELATIME | MNT_NOATIME; in build_mount_kattr()
4304 kattr->attr_set |= MNT_RELATIME; in build_mount_kattr()
4307 kattr->attr_set |= MNT_NOATIME; in build_mount_kattr()
4319 return build_mount_idmapped(attr, usize, kattr, flags); in build_mount_kattr()
4322 static void finish_mount_kattr(struct mount_kattr *kattr) in finish_mount_kattr() argument
4324 put_user_ns(kattr->mnt_userns); in finish_mount_kattr()
4325 kattr->mnt_userns = NULL; in finish_mount_kattr()
4335 struct mount_kattr kattr; in SYSCALL_DEFINE5() local
4363 err = build_mount_kattr(&attr, usize, &kattr, flags); in SYSCALL_DEFINE5()
4367 err = user_path_at(dfd, path, kattr.lookup_flags, &target); in SYSCALL_DEFINE5()
4369 err = do_mount_setattr(&target, &kattr); in SYSCALL_DEFINE5()
4372 finish_mount_kattr(&kattr); in SYSCALL_DEFINE5()