linux/include/linux/pid_namespace.h
<<
>>
Prefs
   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/* MAX_PID_NS_LEVEL is needed for limiting size of 'struct pid' */
  16#define MAX_PID_NS_LEVEL 32
  17
  18struct fs_pin;
  19
  20struct pid_namespace {
  21        struct kref kref;
  22        struct idr idr;
  23        struct rcu_head rcu;
  24        unsigned int pid_allocated;
  25        struct task_struct *child_reaper;
  26        struct kmem_cache *pid_cachep;
  27        unsigned int level;
  28        struct pid_namespace *parent;
  29#ifdef CONFIG_BSD_PROCESS_ACCT
  30        struct fs_pin *bacct;
  31#endif
  32        struct user_namespace *user_ns;
  33        struct ucounts *ucounts;
  34        int reboot;     /* group exit code if this pidns was rebooted */
  35        struct ns_common ns;
  36} __randomize_layout;
  37
  38extern struct pid_namespace init_pid_ns;
  39
  40#define PIDNS_ADDING (1U << 31)
  41
  42#ifdef CONFIG_PID_NS
  43static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
  44{
  45        if (ns != &init_pid_ns)
  46                kref_get(&ns->kref);
  47        return ns;
  48}
  49
  50extern struct pid_namespace *copy_pid_ns(unsigned long flags,
  51        struct user_namespace *user_ns, struct pid_namespace *ns);
  52extern void zap_pid_ns_processes(struct pid_namespace *pid_ns);
  53extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd);
  54extern void put_pid_ns(struct pid_namespace *ns);
  55
  56#else /* !CONFIG_PID_NS */
  57#include <linux/err.h>
  58
  59static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
  60{
  61        return ns;
  62}
  63
  64static inline struct pid_namespace *copy_pid_ns(unsigned long flags,
  65        struct user_namespace *user_ns, struct pid_namespace *ns)
  66{
  67        if (flags & CLONE_NEWPID)
  68                ns = ERR_PTR(-EINVAL);
  69        return ns;
  70}
  71
  72static inline void put_pid_ns(struct pid_namespace *ns)
  73{
  74}
  75
  76static inline void zap_pid_ns_processes(struct pid_namespace *ns)
  77{
  78        BUG();
  79}
  80
  81static inline int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
  82{
  83        return 0;
  84}
  85#endif /* CONFIG_PID_NS */
  86
  87extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
  88void pidhash_init(void);
  89void pid_idr_init(void);
  90
  91#endif /* _LINUX_PID_NS_H */
  92