diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 24 | 
1 files changed, 24 insertions, 0 deletions
| diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 79573504783b..03bca97c8b29 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -91,6 +91,7 @@  #include <uapi/linux/mount.h>  #include <linux/fsnotify.h>  #include <linux/fanotify.h> +#include <linux/io_uring.h>  #include "avc.h"  #include "objsec.h" @@ -6987,6 +6988,28 @@ static int selinux_uring_sqpoll(void)  	return avc_has_perm(&selinux_state, sid, sid,  			    SECCLASS_IO_URING, IO_URING__SQPOLL, NULL);  } + +/** + * selinux_uring_cmd - check if IORING_OP_URING_CMD is allowed + * @ioucmd: the io_uring command structure + * + * Check to see if the current domain is allowed to execute an + * IORING_OP_URING_CMD against the device/file specified in @ioucmd. + * + */ +static int selinux_uring_cmd(struct io_uring_cmd *ioucmd) +{ +	struct file *file = ioucmd->file; +	struct inode *inode = file_inode(file); +	struct inode_security_struct *isec = selinux_inode(inode); +	struct common_audit_data ad; + +	ad.type = LSM_AUDIT_DATA_FILE; +	ad.u.file = file; + +	return avc_has_perm(&selinux_state, current_sid(), isec->sid, +			    SECCLASS_IO_URING, IO_URING__CMD, &ad); +}  #endif /* CONFIG_IO_URING */  /* @@ -7231,6 +7254,7 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {  #ifdef CONFIG_IO_URING  	LSM_HOOK_INIT(uring_override_creds, selinux_uring_override_creds),  	LSM_HOOK_INIT(uring_sqpoll, selinux_uring_sqpoll), +	LSM_HOOK_INIT(uring_cmd, selinux_uring_cmd),  #endif  	/* | 
