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