/* SPDX-License-Identifier: GPL-2.0 */ /* Copyright (c) 2025 Christian Brauner */ #ifndef _LINUX_NSFS_H #define _LINUX_NSFS_H #include #include #include struct path; struct task_struct; struct proc_ns_operations; int ns_get_path(struct path *path, struct task_struct *task, const struct proc_ns_operations *ns_ops); typedef struct ns_common *ns_get_path_helper_t(void *); int ns_get_path_cb(struct path *path, ns_get_path_helper_t ns_get_cb, void *private_data); bool ns_match(const struct ns_common *ns, dev_t dev, ino_t ino); int ns_get_name(char *buf, size_t size, struct task_struct *task, const struct proc_ns_operations *ns_ops); void nsfs_init(void); #define __current_namespace_from_type(__ns) \ _Generic((__ns), \ struct cgroup_namespace *: current->nsproxy->cgroup_ns, \ struct ipc_namespace *: current->nsproxy->ipc_ns, \ struct net *: current->nsproxy->net_ns, \ struct pid_namespace *: task_active_pid_ns(current), \ struct mnt_namespace *: current->nsproxy->mnt_ns, \ struct time_namespace *: current->nsproxy->time_ns, \ struct user_namespace *: current_user_ns(), \ struct uts_namespace *: current->nsproxy->uts_ns) #define current_in_namespace(__ns) (__current_namespace_from_type(__ns) == __ns) #endif /* _LINUX_NSFS_H */