Patch "selinux: do not check open permission on sockets" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
selinux: do not check open permission on sockets
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
selinux-do-not-check-open-permission-on-sockets.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Apr 10 10:31:53 CEST 2018
From: Stephen Smalley <[email protected]>
Date: Fri, 12 May 2017 12:41:24 -0400
Subject: selinux: do not check open permission on sockets
From: Stephen Smalley <[email protected]>
[ Upstream commit ccb544781d34afdb73a9a73ae53035d824d193bf ]
open permission is currently only defined for files in the kernel (COMMON_FILE_PERMS rather than COMMON_FILE_SOCK_PERMS). Construction of an artificial test case that tries to open a socket via /proc/pid/fd will generate a recvfrom avc denial because recvfrom and open happen to map to the same permission bit in socket vs file classes.
open of a socket via /proc/pid/fd is not supported by the kernel regardless and will ultimately return ENXIO. But we hit the permission check first and can thus produce these odd/misleading denials. Omit the open check when operating on a socket.
--- security/selinux/hooks.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
security/selinux/hooks.c +7 -3
@@ -1942,8 +1942,9 @@ static inline u32 file_to_av(struct filestatic inline u32 open_file_to_av (struct file *file) {u32 av =file_to_av (file); +struct inode *inode =file_inode (file); -if (selinux_policycap_openperm) +if (selinux_policycap_openperm && inode->i_sb->s_magic !=SOCKFS_MAGIC ) av |=FILE__OPEN ;return av;
@@ -2912,6 +2913,7 @@ static int selinux_inode_permission(strustatic int selinux_inode_setattr (struct dentry *dentry,struct iattr *iattr) {const struct cred *cred =current_cred (); +struct inode *inode =d_backing_inode (dentry);unsigned int ia_valid = iattr->ia_valid;__u32 av =FILE__WRITE ;
@@ -2927,8 +2929,10 @@ static int selinux_inode_setattr(struct ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))return dentry_has_perm (cred, dentry,FILE__SETATTR ); -if (selinux_policycap_openperm && (ia_valid &ATTR_SIZE ) - && !(ia_valid &ATTR_FILE )) +if (selinux_policycap_openperm && + inode->i_sb->s_magic !=SOCKFS_MAGIC && + (ia_valid &ATTR_SIZE ) && + !(ia_valid &ATTR_FILE )) av |=FILE__OPEN ;return dentry_has_perm (cred, dentry, av);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/selinux-do-not-check-open-permission-on-sockets.patch