cregit-Linux how code gets into the kernel

Release 4.15 include/linux/device_cgroup.h

Directory: include/linux
/* SPDX-License-Identifier: GPL-2.0 */
#include <linux/fs.h>
#include <linux/bpf-cgroup.h>


#define DEVCG_ACC_MKNOD 1

#define DEVCG_ACC_READ  2

#define DEVCG_ACC_WRITE 4

#define DEVCG_ACC_MASK (DEVCG_ACC_MKNOD | DEVCG_ACC_READ | DEVCG_ACC_WRITE)


#define DEVCG_DEV_BLOCK 1

#define DEVCG_DEV_CHAR  2

#define DEVCG_DEV_ALL   4  
/* this represents all devices */

#ifdef CONFIG_CGROUP_DEVICE
extern int __devcgroup_check_permission(short type, u32 major, u32 minor,
					short access);
#else

static inline int __devcgroup_check_permission(short type, u32 major, u32 minor, short access) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Gushchin2090.91%150.00%
Serge E. Hallyn29.09%150.00%
Total22100.00%2100.00%

#endif #if defined(CONFIG_CGROUP_DEVICE) || defined(CONFIG_CGROUP_BPF)
static inline int devcgroup_check_permission(short type, u32 major, u32 minor, short access) { int rc = BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type, major, minor, access); if (rc) return -EPERM; return __devcgroup_check_permission(type, major, minor, access); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Gushchin5094.34%266.67%
Serge E. Hallyn35.66%133.33%
Total53100.00%3100.00%


static inline int devcgroup_inode_permission(struct inode *inode, int mask) { short type, access = 0; if (likely(!inode->i_rdev)) return 0; if (S_ISBLK(inode->i_mode)) type = DEVCG_DEV_BLOCK; else if (S_ISCHR(inode->i_mode)) type = DEVCG_DEV_CHAR; else return 0; if (mask & MAY_WRITE) access |= DEVCG_ACC_WRITE; if (mask & MAY_READ) access |= DEVCG_ACC_READ; return devcgroup_check_permission(type, imajor(inode), iminor(inode), access); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Gushchin5552.88%150.00%
Al Viro4947.12%150.00%
Total104100.00%2100.00%


static inline int devcgroup_inode_mknod(int mode, dev_t dev) { short type; if (!S_ISBLK(mode) && !S_ISCHR(mode)) return 0; if (S_ISBLK(mode)) type = DEVCG_DEV_BLOCK; else type = DEVCG_DEV_CHAR; return devcgroup_check_permission(type, MAJOR(dev), MINOR(dev), DEVCG_ACC_MKNOD); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Gushchin6495.52%150.00%
Al Viro34.48%150.00%
Total67100.00%2100.00%

#else
static inline int devcgroup_inode_permission(struct inode *inode, int mask) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Serge E. Hallyn18100.00%1100.00%
Total18100.00%1100.00%


static inline int devcgroup_inode_mknod(int mode, dev_t dev) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Serge E. Hallyn16100.00%1100.00%
Total16100.00%1100.00%

#endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Roman Gushchin24769.58%240.00%
Serge E. Hallyn5515.49%120.00%
Al Viro5214.65%120.00%
Greg Kroah-Hartman10.28%120.00%
Total355100.00%5100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.