Branch data Line data Source code
1 : : #ifndef _LINUX_PID_NS_H
2 : : #define _LINUX_PID_NS_H
3 : :
4 : : #include <linux/sched.h>
5 : : #include <linux/bug.h>
6 : : #include <linux/mm.h>
7 : : #include <linux/workqueue.h>
8 : : #include <linux/threads.h>
9 : : #include <linux/nsproxy.h>
10 : : #include <linux/kref.h>
11 : :
12 : : struct pidmap {
13 : : atomic_t nr_free;
14 : : void *page;
15 : : };
16 : :
17 : : #define BITS_PER_PAGE (PAGE_SIZE * 8)
18 : : #define BITS_PER_PAGE_MASK (BITS_PER_PAGE-1)
19 : : #define PIDMAP_ENTRIES ((PID_MAX_LIMIT+BITS_PER_PAGE-1)/BITS_PER_PAGE)
20 : :
21 : : struct bsd_acct_struct;
22 : :
23 : : struct pid_namespace {
24 : : struct kref kref;
25 : : struct pidmap pidmap[PIDMAP_ENTRIES];
26 : : struct rcu_head rcu;
27 : : int last_pid;
28 : : unsigned int nr_hashed;
29 : : struct task_struct *child_reaper;
30 : : struct kmem_cache *pid_cachep;
31 : : unsigned int level;
32 : : struct pid_namespace *parent;
33 : : #ifdef CONFIG_PROC_FS
34 : : struct vfsmount *proc_mnt;
35 : : struct dentry *proc_self;
36 : : #endif
37 : : #ifdef CONFIG_BSD_PROCESS_ACCT
38 : : struct bsd_acct_struct *bacct;
39 : : #endif
40 : : struct user_namespace *user_ns;
41 : : struct work_struct proc_work;
42 : : kgid_t pid_gid;
43 : : int hide_pid;
44 : : int reboot; /* group exit code if this pidns was rebooted */
45 : : unsigned int proc_inum;
46 : : };
47 : :
48 : : extern struct pid_namespace init_pid_ns;
49 : :
50 : : #define PIDNS_HASH_ADDING (1U << 31)
51 : :
52 : : #ifdef CONFIG_PID_NS
53 : : static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
54 : : {
55 : : if (ns != &init_pid_ns)
56 : : kref_get(&ns->kref);
57 : : return ns;
58 : : }
59 : :
60 : : extern struct pid_namespace *copy_pid_ns(unsigned long flags,
61 : : struct user_namespace *user_ns, struct pid_namespace *ns);
62 : : extern void zap_pid_ns_processes(struct pid_namespace *pid_ns);
63 : : extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd);
64 : : extern void put_pid_ns(struct pid_namespace *ns);
65 : :
66 : : #else /* !CONFIG_PID_NS */
67 : : #include <linux/err.h>
68 : :
69 : : static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
70 : : {
71 : : return ns;
72 : : }
73 : :
74 : : static inline struct pid_namespace *copy_pid_ns(unsigned long flags,
75 : : struct user_namespace *user_ns, struct pid_namespace *ns)
76 : : {
77 [ + + ]: 3 : if (flags & CLONE_NEWPID)
78 : : ns = ERR_PTR(-EINVAL);
79 : : return ns;
80 : : }
81 : :
82 : : static inline void put_pid_ns(struct pid_namespace *ns)
83 : : {
84 : : }
85 : :
86 : : static inline void zap_pid_ns_processes(struct pid_namespace *ns)
87 : : {
88 : 0 : BUG();
89 : : }
90 : :
91 : : static inline int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
92 : : {
93 : : return 0;
94 : : }
95 : : #endif /* CONFIG_PID_NS */
96 : :
97 : : extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
98 : : void pidhash_init(void);
99 : : void pidmap_init(void);
100 : :
101 : : #endif /* _LINUX_PID_NS_H */
|