LCOV - code coverage report
Current view: top level - include/linux - proc_ns.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 3 3 100.0 %
Date: 2021-04-22 12:43:58 Functions: 1 1 100.0 %

          Line data    Source code
       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             : 
      10             : struct pid_namespace;
      11             : struct nsset;
      12             : struct path;
      13             : struct task_struct;
      14             : struct inode;
      15             : 
      16             : struct 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             : 
      27             : extern const struct proc_ns_operations netns_operations;
      28             : extern const struct proc_ns_operations utsns_operations;
      29             : extern const struct proc_ns_operations ipcns_operations;
      30             : extern const struct proc_ns_operations pidns_operations;
      31             : extern const struct proc_ns_operations pidns_for_children_operations;
      32             : extern const struct proc_ns_operations userns_operations;
      33             : extern const struct proc_ns_operations mntns_operations;
      34             : extern const struct proc_ns_operations cgroupns_operations;
      35             : extern const struct proc_ns_operations timens_operations;
      36             : extern const struct proc_ns_operations timens_for_children_operations;
      37             : 
      38             : /*
      39             :  * We always define these enumerators
      40             :  */
      41             : enum {
      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             : 
      53             : extern int proc_alloc_inum(unsigned int *pino);
      54             : extern void proc_free_inum(unsigned int inum);
      55             : 
      56             : #else /* CONFIG_PROC_FS */
      57             : 
      58             : static inline int proc_alloc_inum(unsigned int *inum)
      59             : {
      60             :         *inum = 1;
      61             :         return 0;
      62             : }
      63             : static inline void proc_free_inum(unsigned int inum) {}
      64             : 
      65             : #endif /* CONFIG_PROC_FS */
      66             : 
      67          52 : static inline int ns_alloc_inum(struct ns_common *ns)
      68             : {
      69          52 :         atomic_long_set(&ns->stashed, 0);
      70          52 :         return proc_alloc_inum(&ns->inum);
      71             : }
      72             : 
      73             : #define ns_free_inum(ns) proc_free_inum((ns)->inum)
      74             : 
      75             : extern struct file *proc_ns_fget(int fd);
      76             : #define get_proc_ns(inode) ((struct ns_common *)(inode)->i_private)
      77             : extern int ns_get_path(struct path *path, struct task_struct *task,
      78             :                         const struct proc_ns_operations *ns_ops);
      79             : typedef struct ns_common *ns_get_path_helper_t(void *);
      80             : extern int ns_get_path_cb(struct path *path, ns_get_path_helper_t ns_get_cb,
      81             :                             void *private_data);
      82             : 
      83             : extern bool ns_match(const struct ns_common *ns, dev_t dev, ino_t ino);
      84             : 
      85             : extern int ns_get_name(char *buf, size_t size, struct task_struct *task,
      86             :                         const struct proc_ns_operations *ns_ops);
      87             : extern void nsfs_init(void);
      88             : 
      89             : #endif /* _LINUX_PROC_NS_H */

Generated by: LCOV version 1.14