cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pid_namespace.h (2254B)


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