FAILED: patch "[PATCH] selinux: implement the security_uring_cmd() LSM hook" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
f4d653dcaa4e ("selinux: implement the security_uring_cmd() LSM hook") 740b03414b20 ("selinux: add support for the io_uring access controls") 29cd6591ab6f ("selinux: teach SELinux about anonymous inodes")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f4d653dcaa4e4056e1630423e6a8ece4869b544f Mon Sep 17 00:00:00 2001
From: Paul Moore <[email protected]>
Date: Wed, 10 Aug 2022 15:55:36 -0400
Subject: [PATCH] selinux: implement the security_uring_cmd() LSM hook
Add a SELinux access control for the iouring IORING_OP_URING_CMD command. This includes the addition of a new permission in the existing "io_uring" object class: "cmd". The subject of the new permission check is the domain of the process requesting access, the object is the open file which points to the device/file that is the target of the IORING_OP_URING_CMD operation. A sample policy rule is shown below:
allow <domain> <file>:io_uring { cmd };
security/selinux/hooks.c +24 -0
@@ -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/*
security/selinux/include/classmap.h +1 -1
@@ -253,7 +253,7 @@ const struct security_class_mapping secclass_map[] = { {"anon_inode" , { COMMON_FILE_PERMS, NULL } }, {"io_uring" , - { "override_creds", "sqpoll", NULL } }, + { "override_creds", "sqpoll", "cmd", NULL } }, { NULL } };