hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/include/linux/device_cgroup.h
....@@ -1,6 +1,5 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 #include <linux/fs.h>
3
-#include <linux/bpf-cgroup.h>
43
54 #define DEVCG_ACC_MKNOD 1
65 #define DEVCG_ACC_READ 2
....@@ -11,27 +10,10 @@
1110 #define DEVCG_DEV_CHAR 2
1211 #define DEVCG_DEV_ALL 4 /* this represents all devices */
1312
14
-#ifdef CONFIG_CGROUP_DEVICE
15
-extern int __devcgroup_check_permission(short type, u32 major, u32 minor,
16
- short access);
17
-#else
18
-static inline int __devcgroup_check_permission(short type, u32 major, u32 minor,
19
- short access)
20
-{ return 0; }
21
-#endif
2213
2314 #if defined(CONFIG_CGROUP_DEVICE) || defined(CONFIG_CGROUP_BPF)
24
-static inline int devcgroup_check_permission(short type, u32 major, u32 minor,
25
- short access)
26
-{
27
- int rc = BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type, major, minor, access);
28
-
29
- if (rc)
30
- return -EPERM;
31
-
32
- return __devcgroup_check_permission(type, major, minor, access);
33
-}
34
-
15
+int devcgroup_check_permission(short type, u32 major, u32 minor,
16
+ short access);
3517 static inline int devcgroup_inode_permission(struct inode *inode, int mask)
3618 {
3719 short type, access = 0;
....@@ -62,6 +44,9 @@
6244 if (!S_ISBLK(mode) && !S_ISCHR(mode))
6345 return 0;
6446
47
+ if (S_ISCHR(mode) && dev == WHITEOUT_DEV)
48
+ return 0;
49
+
6550 if (S_ISBLK(mode))
6651 type = DEVCG_DEV_BLOCK;
6752 else
....@@ -72,6 +57,9 @@
7257 }
7358
7459 #else
60
+static inline int devcgroup_check_permission(short type, u32 major, u32 minor,
61
+ short access)
62
+{ return 0; }
7563 static inline int devcgroup_inode_permission(struct inode *inode, int mask)
7664 { return 0; }
7765 static inline int devcgroup_inode_mknod(int mode, dev_t dev)