~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/nsproxy.h

Version: ~ [ linux-5.13-rc7 ] ~ [ linux-5.12.12 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.45 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.127 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.195 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.237 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.273 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.273 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _LINUX_NSPROXY_H
  3 #define _LINUX_NSPROXY_H
  4 
  5 #include <linux/spinlock.h>
  6 #include <linux/sched.h>
  7 
  8 struct mnt_namespace;
  9 struct uts_namespace;
 10 struct ipc_namespace;
 11 struct pid_namespace;
 12 struct cgroup_namespace;
 13 struct fs_struct;
 14 
 15 /*
 16  * A structure to contain pointers to all per-process
 17  * namespaces - fs (mount), uts, network, sysvipc, etc.
 18  *
 19  * The pid namespace is an exception -- it's accessed using
 20  * task_active_pid_ns.  The pid namespace here is the
 21  * namespace that children will use.
 22  *
 23  * 'count' is the number of tasks holding a reference.
 24  * The count for each namespace, then, will be the number
 25  * of nsproxies pointing to it, not the number of tasks.
 26  *
 27  * The nsproxy is shared by tasks which share all namespaces.
 28  * As soon as a single namespace is cloned or unshared, the
 29  * nsproxy is copied.
 30  */
 31 struct nsproxy {
 32         atomic_t count;
 33         struct uts_namespace *uts_ns;
 34         struct ipc_namespace *ipc_ns;
 35         struct mnt_namespace *mnt_ns;
 36         struct pid_namespace *pid_ns_for_children;
 37         struct net           *net_ns;
 38         struct cgroup_namespace *cgroup_ns;
 39 };
 40 extern struct nsproxy init_nsproxy;
 41 
 42 /*
 43  * the namespaces access rules are:
 44  *
 45  *  1. only current task is allowed to change tsk->nsproxy pointer or
 46  *     any pointer on the nsproxy itself.  Current must hold the task_lock
 47  *     when changing tsk->nsproxy.
 48  *
 49  *  2. when accessing (i.e. reading) current task's namespaces - no
 50  *     precautions should be taken - just dereference the pointers
 51  *
 52  *  3. the access to other task namespaces is performed like this
 53  *     task_lock(task);
 54  *     nsproxy = task->nsproxy;
 55  *     if (nsproxy != NULL) {
 56  *             / *
 57  *               * work with the namespaces here
 58  *               * e.g. get the reference on one of them
 59  *               * /
 60  *     } / *
 61  *         * NULL task->nsproxy means that this task is
 62  *         * almost dead (zombie)
 63  *         * /
 64  *     task_unlock(task);
 65  *
 66  */
 67 
 68 int copy_namespaces(unsigned long flags, struct task_struct *tsk);
 69 void exit_task_namespaces(struct task_struct *tsk);
 70 void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new);
 71 void free_nsproxy(struct nsproxy *ns);
 72 int unshare_nsproxy_namespaces(unsigned long, struct nsproxy **,
 73         struct cred *, struct fs_struct *);
 74 int __init nsproxy_cache_init(void);
 75 
 76 static inline void put_nsproxy(struct nsproxy *ns)
 77 {
 78         if (atomic_dec_and_test(&ns->count)) {
 79                 free_nsproxy(ns);
 80         }
 81 }
 82 
 83 static inline void get_nsproxy(struct nsproxy *ns)
 84 {
 85         atomic_inc(&ns->count);
 86 }
 87 
 88 #endif
 89 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp