root/include/linux/pid_namespace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. get_pid_ns
  2. get_pid_ns
  3. copy_pid_ns
  4. put_pid_ns
  5. zap_pid_ns_processes
  6. reboot_pid_ns

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_PID_NS_H
   3 #define _LINUX_PID_NS_H
   4 
   5 #include <linux/sched.h>
   6 #include <linux/bug.h>
   7 #include <linux/mm.h>
   8 #include <linux/workqueue.h>
   9 #include <linux/threads.h>
  10 #include <linux/nsproxy.h>
  11 #include <linux/kref.h>
  12 #include <linux/ns_common.h>
  13 #include <linux/idr.h>
  14 
  15 
  16 struct fs_pin;
  17 
  18 enum { /* definitions for pid_namespace's hide_pid field */
  19         HIDEPID_OFF       = 0,
  20         HIDEPID_NO_ACCESS = 1,
  21         HIDEPID_INVISIBLE = 2,
  22 };
  23 
  24 struct pid_namespace {
  25         struct kref kref;
  26         struct idr idr;
  27         struct rcu_head rcu;
  28         unsigned int pid_allocated;
  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         struct dentry *proc_thread_self;
  37 #endif
  38 #ifdef CONFIG_BSD_PROCESS_ACCT
  39         struct fs_pin *bacct;
  40 #endif
  41         struct user_namespace *user_ns;
  42         struct ucounts *ucounts;
  43         struct work_struct proc_work;
  44         kgid_t pid_gid;
  45         int hide_pid;
  46         int reboot;     /* group exit code if this pidns was rebooted */
  47         struct ns_common ns;
  48 } __randomize_layout;
  49 
  50 extern struct pid_namespace init_pid_ns;
  51 
  52 #define PIDNS_ADDING (1U << 31)
  53 
  54 #ifdef CONFIG_PID_NS
  55 static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
  56 {
  57         if (ns != &init_pid_ns)
  58                 kref_get(&ns->kref);
  59         return ns;
  60 }
  61 
  62 extern struct pid_namespace *copy_pid_ns(unsigned long flags,
  63         struct user_namespace *user_ns, struct pid_namespace *ns);
  64 extern void zap_pid_ns_processes(struct pid_namespace *pid_ns);
  65 extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd);
  66 extern void put_pid_ns(struct pid_namespace *ns);
  67 
  68 #else /* !CONFIG_PID_NS */
  69 #include <linux/err.h>
  70 
  71 static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
  72 {
  73         return ns;
  74 }
  75 
  76 static inline struct pid_namespace *copy_pid_ns(unsigned long flags,
  77         struct user_namespace *user_ns, struct pid_namespace *ns)
  78 {
  79         if (flags & CLONE_NEWPID)
  80                 ns = ERR_PTR(-EINVAL);
  81         return ns;
  82 }
  83 
  84 static inline void put_pid_ns(struct pid_namespace *ns)
  85 {
  86 }
  87 
  88 static inline void zap_pid_ns_processes(struct pid_namespace *ns)
  89 {
  90         BUG();
  91 }
  92 
  93 static inline int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
  94 {
  95         return 0;
  96 }
  97 #endif /* CONFIG_PID_NS */
  98 
  99 extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
 100 void pidhash_init(void);
 101 void pid_idr_init(void);
 102 
 103 #endif /* _LINUX_PID_NS_H */

/* [<][>][^][v][top][bottom][index][help] */