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

proc_ns.h (2627B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * procfs namespace bits
      4 */
      5#ifndef _LINUX_PROC_NS_H
      6#define _LINUX_PROC_NS_H
      7
      8#include <linux/ns_common.h>
      9
     10struct pid_namespace;
     11struct nsset;
     12struct path;
     13struct task_struct;
     14struct inode;
     15
     16struct proc_ns_operations {
     17	const char *name;
     18	const char *real_ns_name;
     19	int type;
     20	struct ns_common *(*get)(struct task_struct *task);
     21	void (*put)(struct ns_common *ns);
     22	int (*install)(struct nsset *nsset, struct ns_common *ns);
     23	struct user_namespace *(*owner)(struct ns_common *ns);
     24	struct ns_common *(*get_parent)(struct ns_common *ns);
     25} __randomize_layout;
     26
     27extern const struct proc_ns_operations netns_operations;
     28extern const struct proc_ns_operations utsns_operations;
     29extern const struct proc_ns_operations ipcns_operations;
     30extern const struct proc_ns_operations pidns_operations;
     31extern const struct proc_ns_operations pidns_for_children_operations;
     32extern const struct proc_ns_operations userns_operations;
     33extern const struct proc_ns_operations mntns_operations;
     34extern const struct proc_ns_operations cgroupns_operations;
     35extern const struct proc_ns_operations timens_operations;
     36extern const struct proc_ns_operations timens_for_children_operations;
     37
     38/*
     39 * We always define these enumerators
     40 */
     41enum {
     42	PROC_ROOT_INO		= 1,
     43	PROC_IPC_INIT_INO	= 0xEFFFFFFFU,
     44	PROC_UTS_INIT_INO	= 0xEFFFFFFEU,
     45	PROC_USER_INIT_INO	= 0xEFFFFFFDU,
     46	PROC_PID_INIT_INO	= 0xEFFFFFFCU,
     47	PROC_CGROUP_INIT_INO	= 0xEFFFFFFBU,
     48	PROC_TIME_INIT_INO	= 0xEFFFFFFAU,
     49};
     50
     51#ifdef CONFIG_PROC_FS
     52
     53extern int proc_alloc_inum(unsigned int *pino);
     54extern void proc_free_inum(unsigned int inum);
     55
     56#else /* CONFIG_PROC_FS */
     57
     58static inline int proc_alloc_inum(unsigned int *inum)
     59{
     60	*inum = 1;
     61	return 0;
     62}
     63static inline void proc_free_inum(unsigned int inum) {}
     64
     65#endif /* CONFIG_PROC_FS */
     66
     67static inline int ns_alloc_inum(struct ns_common *ns)
     68{
     69	atomic_long_set(&ns->stashed, 0);
     70	return proc_alloc_inum(&ns->inum);
     71}
     72
     73#define ns_free_inum(ns) proc_free_inum((ns)->inum)
     74
     75extern struct file *proc_ns_fget(int fd);
     76#define get_proc_ns(inode) ((struct ns_common *)(inode)->i_private)
     77extern int ns_get_path(struct path *path, struct task_struct *task,
     78			const struct proc_ns_operations *ns_ops);
     79typedef struct ns_common *ns_get_path_helper_t(void *);
     80extern int ns_get_path_cb(struct path *path, ns_get_path_helper_t ns_get_cb,
     81			    void *private_data);
     82
     83extern bool ns_match(const struct ns_common *ns, dev_t dev, ino_t ino);
     84
     85extern int ns_get_name(char *buf, size_t size, struct task_struct *task,
     86			const struct proc_ns_operations *ns_ops);
     87extern void nsfs_init(void);
     88
     89#endif /* _LINUX_PROC_NS_H */