Lines Matching refs:ns

197 void __ns_tree_add_raw(struct ns_common *ns, struct ns_tree_root *ns_tree)  in __ns_tree_add_raw()  argument
200 const struct proc_ns_operations *ops = ns->ops; in __ns_tree_add_raw()
202 VFS_WARN_ON_ONCE(!ns->ns_id); in __ns_tree_add_raw()
207 node = ns_tree_node_add(&ns->ns_tree_node, ns_tree, ns_cmp); in __ns_tree_add_raw()
210 ns_tree_node_add(&ns->ns_unified_node, &ns_unified_root, ns_cmp_unified); in __ns_tree_add_raw()
217 user_ns = ops->owner(ns); in __ns_tree_add_raw()
219 struct ns_common *owner = &user_ns->ns; in __ns_tree_add_raw()
223 ns_tree_node_add(&ns->ns_owner_node, &owner->ns_owner_root, ns_cmp_owner); in __ns_tree_add_raw()
226 VFS_WARN_ON_ONCE(ns != to_ns_common(&init_user_ns)); in __ns_tree_add_raw()
233 void __ns_tree_remove(struct ns_common *ns, struct ns_tree_root *ns_tree) in __ns_tree_remove() argument
235 const struct proc_ns_operations *ops = ns->ops; in __ns_tree_remove()
238 VFS_WARN_ON_ONCE(ns_tree_node_empty(&ns->ns_tree_node)); in __ns_tree_remove()
239 VFS_WARN_ON_ONCE(list_empty(&ns->ns_tree_node.ns_list_entry)); in __ns_tree_remove()
244 ns_tree_node_del(&ns->ns_tree_node, ns_tree); in __ns_tree_remove()
247 ns_tree_node_del(&ns->ns_unified_node, &ns_unified_root); in __ns_tree_remove()
251 user_ns = ops->owner(ns); in __ns_tree_remove()
253 struct ns_common *owner = &user_ns->ns; in __ns_tree_remove()
254 ns_tree_node_del(&ns->ns_owner_node, &owner->ns_owner_root); in __ns_tree_remove()
265 const struct ns_common *ns = node_to_ns(node); in ns_find() local
267 if (ns_id < ns->ns_id) in ns_find()
269 if (ns_id > ns->ns_id) in ns_find()
277 const struct ns_common *ns = node_to_ns_unified(node); in ns_find_unified() local
279 if (ns_id < ns->ns_id) in ns_find_unified()
281 if (ns_id > ns->ns_id) in ns_find_unified()
365 struct ns_common *__ns_tree_adjoined_rcu(struct ns_common *ns, in __ns_tree_adjoined_rcu() argument
373 list = rcu_dereference(list_bidir_prev_rcu(&ns->ns_tree_node.ns_list_entry)); in __ns_tree_adjoined_rcu()
375 list = rcu_dereference(list_next_rcu(&ns->ns_tree_node.ns_list_entry)); in __ns_tree_adjoined_rcu()
392 u64 __ns_tree_gen_id(struct ns_common *ns, u64 id) in __ns_tree_gen_id() argument
397 ns->ns_id = id; in __ns_tree_gen_id()
399 ns->ns_id = atomic64_inc_return(&namespace_cookie); in __ns_tree_gen_id()
400 return ns->ns_id; in __ns_tree_gen_id()
476 struct ns_common *ns; in lookup_ns_owner_at() local
478 ns = node_to_ns_owner(node); in lookup_ns_owner_at()
479 if (ns_id <= ns->ns_id) { in lookup_ns_owner_at()
480 ret = ns; in lookup_ns_owner_at()
481 if (ns_id == ns->ns_id) in lookup_ns_owner_at()
496 struct ns_common *ns; in lookup_ns_id() local
499 ns = ns_tree_lookup_rcu(mnt_ns_id, ns_type); in lookup_ns_id()
500 if (!ns) in lookup_ns_id()
503 if (!ns_get_unless_inactive(ns)) in lookup_ns_id()
506 return ns; in lookup_ns_id()
510 const struct ns_common *ns) in ns_requested() argument
512 return !kls->ns_type || (kls->ns_type & ns->ns_type); in ns_requested()
516 struct ns_common *ns) in may_list_ns() argument
525 owner = ns_owner(ns); in may_list_ns()
534 if (is_current_namespace(ns)) in may_list_ns()
537 if (ns->ns_type != CLONE_NEWUSER) in may_list_ns()
540 if (ns_capable_noaudit(to_user_ns(ns), CAP_SYS_ADMIN)) in may_list_ns()
546 static inline void ns_put(struct ns_common *ns) in ns_put() argument
548 if (ns && ns->ops) in ns_put()
549 ns->ops->put(ns); in ns_put()
557 struct ns_common *ns __free(ns_put) = NULL; in legitimize_ns()
562 ns = ns_get_unless_inactive(candidate); in legitimize_ns()
563 if (!ns) in legitimize_ns()
566 if (!may_list_ns(kls, ns)) in legitimize_ns()
569 return no_free_ptr(ns); in legitimize_ns()
576 struct ns_common *ns = NULL, *first_ns = NULL, *prev = NULL; in do_listns_userns() local
583 ns = to_ns_common(current_user_ns()); in do_listns_userns()
585 ns = lookup_ns_id(kls->user_ns_id, CLONE_NEWUSER); in do_listns_userns()
586 if (!ns) in do_listns_userns()
588 kls->user_ns = to_user_ns(ns); in do_listns_userns()
595 kls->first_ns = lookup_ns_owner_at(kls->last_ns_id + 1, ns); in do_listns_userns()
610 ns = first_ns; in do_listns_userns()
611 list_for_each_entry_from_rcu(ns, head, ns_owner_node.ns_list_entry) { in do_listns_userns()
617 valid = legitimize_ns(kls, ns); in do_listns_userns()
666 struct ns_common *ns; in lookup_ns_id_at() local
669 ns = node_to_ns(node); in lookup_ns_id_at()
671 ns = node_to_ns_unified(node); in lookup_ns_id_at()
673 if (ns_id <= ns->ns_id) { in lookup_ns_id_at()
678 if (ns_id == ns->ns_id) in lookup_ns_id_at()
699 static inline struct ns_common *next_ns_common(struct ns_common *ns, in next_ns_common() argument
703 …return list_entry_rcu(ns->ns_tree_node.ns_list_entry.next, struct ns_common, ns_tree_node.ns_list_… in next_ns_common()
704 …return list_entry_rcu(ns->ns_unified_node.ns_list_entry.next, struct ns_common, ns_unified_node.ns… in next_ns_common()
707 static inline bool ns_common_is_head(struct ns_common *ns, in ns_common_is_head() argument
712 return &ns->ns_tree_node.ns_list_entry == head; in ns_common_is_head()
713 return &ns->ns_unified_node.ns_list_entry == head; in ns_common_is_head()
720 struct ns_common *ns, *first_ns = NULL, *prev = NULL; in do_listns() local
755 for (ns = first_ns; !ns_common_is_head(ns, head, ns_tree) && nr_ns_ids; in do_listns()
756 ns = next_ns_common(ns, ns_tree)) { in do_listns()
759 valid = legitimize_ns(kls, ns); in do_listns()