hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/include/linux/proc_fs.h
....@@ -5,6 +5,7 @@
55 #ifndef _LINUX_PROC_FS_H
66 #define _LINUX_PROC_FS_H
77
8
+#include <linux/compiler.h>
89 #include <linux/types.h>
910 #include <linux/fs.h>
1011
....@@ -12,12 +13,70 @@
1213 struct seq_file;
1314 struct seq_operations;
1415
16
+enum {
17
+ /*
18
+ * All /proc entries using this ->proc_ops instance are never removed.
19
+ *
20
+ * If in doubt, ignore this flag.
21
+ */
22
+#ifdef MODULE
23
+ PROC_ENTRY_PERMANENT = 0U,
24
+#else
25
+ PROC_ENTRY_PERMANENT = 1U << 0,
26
+#endif
27
+};
28
+
29
+struct proc_ops {
30
+ unsigned int proc_flags;
31
+ int (*proc_open)(struct inode *, struct file *);
32
+ ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
33
+ ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
34
+ ssize_t (*proc_write)(struct file *, const char __user *, size_t, loff_t *);
35
+ loff_t (*proc_lseek)(struct file *, loff_t, int);
36
+ int (*proc_release)(struct inode *, struct file *);
37
+ __poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
38
+ long (*proc_ioctl)(struct file *, unsigned int, unsigned long);
39
+#ifdef CONFIG_COMPAT
40
+ long (*proc_compat_ioctl)(struct file *, unsigned int, unsigned long);
41
+#endif
42
+ int (*proc_mmap)(struct file *, struct vm_area_struct *);
43
+ unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
44
+} __randomize_layout;
45
+
46
+/* definitions for hide_pid field */
47
+enum proc_hidepid {
48
+ HIDEPID_OFF = 0,
49
+ HIDEPID_NO_ACCESS = 1,
50
+ HIDEPID_INVISIBLE = 2,
51
+ HIDEPID_NOT_PTRACEABLE = 4, /* Limit pids to only ptraceable pids */
52
+};
53
+
54
+/* definitions for proc mount option pidonly */
55
+enum proc_pidonly {
56
+ PROC_PIDONLY_OFF = 0,
57
+ PROC_PIDONLY_ON = 1,
58
+};
59
+
60
+struct proc_fs_info {
61
+ struct pid_namespace *pid_ns;
62
+ struct dentry *proc_self; /* For /proc/self */
63
+ struct dentry *proc_thread_self; /* For /proc/thread-self */
64
+ kgid_t pid_gid;
65
+ enum proc_hidepid hide_pid;
66
+ enum proc_pidonly pidonly;
67
+};
68
+
69
+static inline struct proc_fs_info *proc_sb_info(struct super_block *sb)
70
+{
71
+ return sb->s_fs_info;
72
+}
73
+
1574 #ifdef CONFIG_PROC_FS
1675
1776 typedef int (*proc_write_t)(struct file *, char *, size_t);
1877
1978 extern void proc_root_init(void);
20
-extern void proc_flush_task(struct task_struct *);
79
+extern void proc_flush_pid(struct pid *);
2180
2281 extern struct proc_dir_entry *proc_symlink(const char *,
2382 struct proc_dir_entry *, const char *);
....@@ -44,10 +103,10 @@
44103
45104 extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
46105 struct proc_dir_entry *,
47
- const struct file_operations *,
106
+ const struct proc_ops *,
48107 void *);
49108
50
-struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);
109
+struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct proc_ops *proc_ops);
51110 extern void proc_set_size(struct proc_dir_entry *, loff_t);
52111 extern void proc_set_user(struct proc_dir_entry *, kuid_t, kgid_t);
53112 extern void *PDE_DATA(const struct inode *);
....@@ -59,8 +118,8 @@
59118 struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode,
60119 struct proc_dir_entry *parent, const struct seq_operations *ops,
61120 unsigned int state_size, void *data);
62
-#define proc_create_net(name, mode, parent, state_size, ops) \
63
- proc_create_net_data(name, mode, parent, state_size, ops, NULL)
121
+#define proc_create_net(name, mode, parent, ops, state_size) \
122
+ proc_create_net_data(name, mode, parent, ops, state_size, NULL)
64123 struct proc_dir_entry *proc_create_net_single(const char *name, umode_t mode,
65124 struct proc_dir_entry *parent,
66125 int (*show)(struct seq_file *, void *), void *data);
....@@ -76,13 +135,26 @@
76135 void *data);
77136 extern struct pid *tgid_pidfd_to_pid(const struct file *file);
78137
138
+struct bpf_iter_aux_info;
139
+extern int bpf_iter_init_seq_net(void *priv_data, struct bpf_iter_aux_info *aux);
140
+extern void bpf_iter_fini_seq_net(void *priv_data);
141
+
142
+#ifdef CONFIG_PROC_PID_ARCH_STATUS
143
+/*
144
+ * The architecture which selects CONFIG_PROC_PID_ARCH_STATUS must
145
+ * provide proc_pid_arch_status() definition.
146
+ */
147
+int proc_pid_arch_status(struct seq_file *m, struct pid_namespace *ns,
148
+ struct pid *pid, struct task_struct *task);
149
+#endif /* CONFIG_PROC_PID_ARCH_STATUS */
150
+
79151 #else /* CONFIG_PROC_FS */
80152
81153 static inline void proc_root_init(void)
82154 {
83155 }
84156
85
-static inline void proc_flush_task(struct task_struct *task)
157
+static inline void proc_flush_pid(struct pid *pid)
86158 {
87159 }
88160
....@@ -105,8 +177,8 @@
105177 #define proc_create_seq(name, mode, parent, ops) ({NULL;})
106178 #define proc_create_single(name, mode, parent, show) ({NULL;})
107179 #define proc_create_single_data(name, mode, parent, show, data) ({NULL;})
108
-#define proc_create(name, mode, parent, proc_fops) ({NULL;})
109
-#define proc_create_data(name, mode, parent, proc_fops, data) ({NULL;})
180
+#define proc_create(name, mode, parent, proc_ops) ({NULL;})
181
+#define proc_create_data(name, mode, parent, proc_ops, data) ({NULL;})
110182
111183 static inline void proc_set_size(struct proc_dir_entry *de, loff_t size) {}
112184 static inline void proc_set_user(struct proc_dir_entry *de, kuid_t uid, kgid_t gid) {}
....@@ -118,8 +190,10 @@
118190 static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *parent) { return 0; }
119191
120192 #define proc_create_net_data(name, mode, parent, ops, state_size, data) ({NULL;})
193
+#define proc_create_net_data_write(name, mode, parent, ops, write, state_size, data) ({NULL;})
121194 #define proc_create_net(name, mode, parent, state_size, ops) ({NULL;})
122195 #define proc_create_net_single(name, mode, parent, show, data) ({NULL;})
196
+#define proc_create_net_single_write(name, mode, parent, show, write, data) ({NULL;})
123197
124198 static inline struct pid *tgid_pidfd_to_pid(const struct file *file)
125199 {
....@@ -127,12 +201,6 @@
127201 }
128202
129203 #endif /* CONFIG_PROC_FS */
130
-
131
-#ifdef CONFIG_PROC_UID
132
-extern void proc_register_uid(kuid_t uid);
133
-#else
134
-static inline void proc_register_uid(kuid_t uid) {}
135
-#endif
136204
137205 struct net;
138206
....@@ -147,9 +215,11 @@
147215 struct ns_common *(*get_ns)(struct ns_common *ns));
148216
149217 /* get the associated pid namespace for a file in procfs */
150
-static inline struct pid_namespace *proc_pid_ns(const struct inode *inode)
218
+static inline struct pid_namespace *proc_pid_ns(struct super_block *sb)
151219 {
152
- return inode->i_sb->s_fs_info;
220
+ return proc_sb_info(sb)->pid_ns;
153221 }
154222
223
+bool proc_ns_file(const struct file *file);
224
+
155225 #endif /* _LINUX_PROC_FS_H */