1 /* Internal procfs definitions 2 * 3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11 12 #include <linux/proc_fs.h> 13 #include <linux/proc_ns.h> 14 #include <linux/refcount.h> 15 #include <linux/spinlock.h> 16 #include <linux/atomic.h> 17 #include <linux/binfmts.h> 18 #include <linux/sched/coredump.h> 19 #include <linux/sched/task.h> 20 21 struct ctl_table_header; 22 struct mempolicy; 23 24 /* 25 * This is not completely implemented yet. The idea is to 26 * create an in-memory tree (like the actual /proc filesystem 27 * tree) of these proc_dir_entries, so that we can dynamically 28 * add new files to /proc. 29 * 30 * parent/subdir are used for the directory structure (every /proc file has a 31 * parent, but "subdir" is empty for all non-directory entries). 32 * subdir_node is used to build the rb tree "subdir" of the parent. 33 */ 34 struct proc_dir_entry { 35 /* 36 * number of callers into module in progress; 37 * negative -> it's going away RSN 38 */ 39 atomic_t in_use; 40 refcount_t refcnt; 41 struct list_head pde_openers; /* who did ->open, but not ->release */ 42 /* protects ->pde_openers and all struct pde_opener instances */ 43 spinlock_t pde_unload_lock; 44 struct completion *pde_unload_completion; 45 const struct inode_operations *proc_iops; 46 const struct file_operations *proc_fops; 47 union { 48 const struct seq_operations *seq_ops; 49 int (*single_show)(struct seq_file *, void *); 50 }; 51 void *data; 52 unsigned int state_size; 53 unsigned int low_ino; 54 nlink_t nlink; 55 kuid_t uid; 56 kgid_t gid; 57 loff_t size; 58 struct proc_dir_entry *parent; 59 struct rb_root subdir; 60 struct rb_node subdir_node; 61 char *name; 62 umode_t mode; 63 u8 namelen; 64 #ifdef CONFIG_64BIT 65 #define SIZEOF_PDE_INLINE_NAME (192-155) 66 #else 67 #define SIZEOF_PDE_INLINE_NAME (128-95) 68 #endif 69 char inline_name[SIZEOF_PDE_INLINE_NAME]; 70 } __randomize_layout; 71 72 extern struct kmem_cache *proc_dir_entry_cache; 73 void pde_free(struct proc_dir_entry *pde); 74 75 union proc_op { 76 int (*proc_get_link)(struct dentry *, struct path *); 77 int (*proc_show)(struct seq_file *m, 78 struct pid_namespace *ns, struct pid *pid, 79 struct task_struct *task); 80 }; 81 82 struct proc_inode { 83 struct pid *pid; 84 unsigned int fd; 85 union proc_op op; 86 struct proc_dir_entry *pde; 87 struct ctl_table_header *sysctl; 88 struct ctl_table *sysctl_entry; 89 struct hlist_node sysctl_inodes; 90 const struct proc_ns_operations *ns_ops; 91 struct inode vfs_inode; 92 } __randomize_layout; 93 94 /* 95 * General functions 96 */ 97 static inline struct proc_inode *PROC_I(const struct inode *inode) 98 { 99 return container_of(inode, struct proc_inode, vfs_inode); 100 } 101 102 static inline struct proc_dir_entry *PDE(const struct inode *inode) 103 { 104 return PROC_I(inode)->pde; 105 } 106 107 static inline void *__PDE_DATA(const struct inode *inode) 108 { 109 return PDE(inode)->data; 110 } 111 112 static inline struct pid *proc_pid(struct inode *inode) 113 { 114 return PROC_I(inode)->pid; 115 } 116 117 static inline struct task_struct *get_proc_task(struct inode *inode) 118 { 119 return get_pid_task(proc_pid(inode), PIDTYPE_PID); 120 } 121 122 void task_dump_owner(struct task_struct *task, umode_t mode, 123 kuid_t *ruid, kgid_t *rgid); 124 125 unsigned name_to_int(const struct qstr *qstr); 126 /* 127 * Offset of the first process in the /proc root directory.. 128 */ 129 #define FIRST_PROCESS_ENTRY 256 130 131 /* Worst case buffer size needed for holding an integer. */ 132 #define PROC_NUMBUF 13 133 134 /* 135 * array.c 136 */ 137 extern const struct file_operations proc_tid_children_operations; 138 139 extern int proc_tid_stat(struct seq_file *, struct pid_namespace *, 140 struct pid *, struct task_struct *); 141 extern int proc_tgid_stat(struct seq_file *, struct pid_namespace *, 142 struct pid *, struct task_struct *); 143 extern int proc_pid_status(struct seq_file *, struct pid_namespace *, 144 struct pid *, struct task_struct *); 145 extern int proc_pid_statm(struct seq_file *, struct pid_namespace *, 146 struct pid *, struct task_struct *); 147 148 /* 149 * base.c 150 */ 151 extern const struct dentry_operations pid_dentry_operations; 152 extern int pid_getattr(const struct path *, struct kstat *, u32, unsigned int); 153 extern int proc_setattr(struct dentry *, struct iattr *); 154 extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *, umode_t); 155 extern void pid_update_inode(struct task_struct *, struct inode *); 156 extern int pid_delete_dentry(const struct dentry *); 157 extern int proc_pid_readdir(struct file *, struct dir_context *); 158 extern struct dentry *proc_pid_lookup(struct inode *, struct dentry *, unsigned int); 159 extern loff_t mem_lseek(struct file *, loff_t, int); 160 161 /* Lookups */ 162 typedef struct dentry *instantiate_t(struct dentry *, 163 struct task_struct *, const void *); 164 extern bool proc_fill_cache(struct file *, struct dir_context *, const char *, int, 165 instantiate_t, struct task_struct *, const void *); 166 167 /* 168 * generic.c 169 */ 170 struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode, 171 struct proc_dir_entry **parent, void *data); 172 struct proc_dir_entry *proc_register(struct proc_dir_entry *dir, 173 struct proc_dir_entry *dp); 174 extern struct dentry *proc_lookup(struct inode *, struct dentry *, unsigned int); 175 struct dentry *proc_lookup_de(struct inode *, struct dentry *, struct proc_dir_entry *); 176 extern int proc_readdir(struct file *, struct dir_context *); 177 int proc_readdir_de(struct file *, struct dir_context *, struct proc_dir_entry *); 178 179 static inline struct proc_dir_entry *pde_get(struct proc_dir_entry *pde) 180 { 181 refcount_inc(&pde->refcnt); 182 return pde; 183 } 184 extern void pde_put(struct proc_dir_entry *); 185 186 static inline bool is_empty_pde(const struct proc_dir_entry *pde) 187 { 188 return S_ISDIR(pde->mode) && !pde->proc_iops; 189 } 190 191 /* 192 * inode.c 193 */ 194 struct pde_opener { 195 struct file *file; 196 struct list_head lh; 197 bool closing; 198 struct completion *c; 199 } __randomize_layout; 200 extern const struct inode_operations proc_link_inode_operations; 201 202 extern const struct inode_operations proc_pid_link_inode_operations; 203 204 void proc_init_kmemcache(void); 205 void set_proc_pid_nlink(void); 206 extern struct inode *proc_get_inode(struct super_block *, struct proc_dir_entry *); 207 extern int proc_fill_super(struct super_block *, void *data, int flags); 208 extern void proc_entry_rundown(struct proc_dir_entry *); 209 210 /* 211 * proc_namespaces.c 212 */ 213 extern const struct inode_operations proc_ns_dir_inode_operations; 214 extern const struct file_operations proc_ns_dir_operations; 215 216 /* 217 * proc_net.c 218 */ 219 extern const struct file_operations proc_net_operations; 220 extern const struct inode_operations proc_net_inode_operations; 221 222 #ifdef CONFIG_NET 223 extern int proc_net_init(void); 224 #else 225 static inline int proc_net_init(void) { return 0; } 226 #endif 227 228 /* 229 * proc_self.c 230 */ 231 extern int proc_setup_self(struct super_block *); 232 233 /* 234 * proc_thread_self.c 235 */ 236 extern int proc_setup_thread_self(struct super_block *); 237 extern void proc_thread_self_init(void); 238 239 /* 240 * proc_sysctl.c 241 */ 242 #ifdef CONFIG_PROC_SYSCTL 243 extern int proc_sys_init(void); 244 extern void proc_sys_evict_inode(struct inode *inode, 245 struct ctl_table_header *head); 246 #else 247 static inline void proc_sys_init(void) { } 248 static inline void proc_sys_evict_inode(struct inode *inode, 249 struct ctl_table_header *head) { } 250 #endif 251 252 /* 253 * proc_tty.c 254 */ 255 #ifdef CONFIG_TTY 256 extern void proc_tty_init(void); 257 #else 258 static inline void proc_tty_init(void) {} 259 #endif 260 261 /* 262 * root.c 263 */ 264 extern struct proc_dir_entry proc_root; 265 extern int proc_parse_options(char *options, struct pid_namespace *pid); 266 267 extern void proc_self_init(void); 268 extern int proc_remount(struct super_block *, int *, char *); 269 270 /* 271 * task_[no]mmu.c 272 */ 273 struct mem_size_stats; 274 struct proc_maps_private { 275 struct inode *inode; 276 struct task_struct *task; 277 struct mm_struct *mm; 278 struct mem_size_stats *rollup; 279 #ifdef CONFIG_MMU 280 struct vm_area_struct *tail_vma; 281 #endif 282 #ifdef CONFIG_NUMA 283 struct mempolicy *task_mempolicy; 284 #endif 285 } __randomize_layout; 286 287 struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode); 288 289 extern const struct file_operations proc_pid_maps_operations; 290 extern const struct file_operations proc_tid_maps_operations; 291 extern const struct file_operations proc_pid_numa_maps_operations; 292 extern const struct file_operations proc_tid_numa_maps_operations; 293 extern const struct file_operations proc_pid_smaps_operations; 294 extern const struct file_operations proc_pid_smaps_rollup_operations; 295 extern const struct file_operations proc_tid_smaps_operations; 296 extern const struct file_operations proc_clear_refs_operations; 297 extern const struct file_operations proc_pagemap_operations; 298 299 extern unsigned long task_vsize(struct mm_struct *); 300 extern unsigned long task_statm(struct mm_struct *, 301 unsigned long *, unsigned long *, 302 unsigned long *, unsigned long *); 303 extern void task_mem(struct seq_file *, struct mm_struct *); 304