Skip to contentSkip to conversation

Revert "selinux: fix the default socket labeling in sock_graft()"

PATCH New Paul Moore 4 participants 4 messages Jul 28, 2014 – Jul 31, 2014

Subsystems (3)
lore
Share & tools
lore

Paul Moore

author
#0 lore raw

PATCH 1/1 Revert "selinux: fix the default socket labeling in sock_graft()"

This reverts commit 4da6daf4d3df5a977e4623963f141a627fd2efce.

Unfortunately, the commit in question caused problems with Bluetooth devices, specifically it caused them to get caught in the newly created BUG_ON() check. The AF_ALG problem still exists, but will be addressed in a future patch.

---
 include/linux/security.h |    5 +----
 security/selinux/hooks.c |   13 ++-----------
 2 files changed, 3 insertions(+), 15 deletions(-)
include/linux/security.h +1 -4
index 794be73..6478ce3 100644
@@ -987,10 +987,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
  *	Retrieve the LSM-specific secid for the sock to enable caching of network
  *	authorizations.
  * @sock_graft:
- *	This hook is called in response to a newly created sock struct being
- *	grafted onto an existing socket and allows the security module to
- *	perform whatever security attribute management is necessary for both
- *	the sock and socket.
+ *	Sets the socket's isec sid to the sock's sid.
  * @inet_conn_request:
  *	Sets the openreq's sid to socket's sid with MLS portion taken from peer sid.
  * @inet_csk_clone:
security/selinux/hooks.c +2 -11
index b3a6754..336f0a0 100644
@@ -4499,18 +4499,9 @@ static void selinux_sock_graft(struct sock *sk, struct socket *parent)
 	struct inode_security_struct *isec = SOCK_INODE(parent)->i_security;
 	struct sk_security_struct *sksec = sk->sk_security;
 
-	switch (sk->sk_family) {
-	case PF_INET:
-	case PF_INET6:
-	case PF_UNIX:
+	if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 ||
+	    sk->sk_family == PF_UNIX)
 		isec->sid = sksec->sid;
-		break;
-	default:
-		/* by default there is no special labeling mechanism for the
-		 * sksec label so inherit the label from the parent socket */
-		BUG_ON(sksec->sid != SECINITSID_UNLABELED);
-		sksec->sid = isec->sid;
-	}
 	sksec->sclass = isec->sclass;
 }
 
#1 lore raw

PATCH 1/1 crypto: properly label AF_ALG socket

Th AF_ALG socket was missing a security label (e.g. SELinux) which means that socket was in "unlabeled" state.

This was recently demonstrated in the cryptsetup package (cryptsetup v1.6.5 and later.)
See https://bugzilla.redhat.com/show_bug.cgi?id=1115120

This patch clones the sock's label from the parent sock and resolves the issue (similar to AF_BLUETOOTH protocol family).

---
 crypto/af_alg.c | 2 ++
 1 file changed, 2 insertions(+)
crypto/af_alg.c +2 -0
index 966f893..6a3ad80 100644
@@ -21,6 +21,7 @@
 #include <linux/module.h>
 #include <linux/net.h>
 #include <linux/rwsem.h>
+#include <linux/security.h>
 
 struct alg_type_list {
 	const struct af_alg_type *type;
@@ -243,6 +244,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
 
 	sock_init_data(newsock, sk2);
 	sock_graft(sk2, newsock);
+	security_sk_clone(sk, sk2);
 
 	err = type->accept(ask->private, sk2);
 	if (err) {
Signature · 1 line
2.0.1
maintainer Acked-by on v1 1/1
#2 lore raw

Re: [PATCH] crypto: properly label AF_ALG socket

Quoted 7 lines · Milan Broz

Th AF_ALG socket was missing a security label (e.g. SELinux) which means that socket was in "unlabeled" state.

This was recently demonstrated in the cryptsetup package (cryptsetup v1.6.5 and later.)
See https://bugzilla.redhat.com/show_bug.cgi?id=1115120

Quoted 8 lines

This patch clones the sock's label from the parent sock and resolves the issue (similar to AF_BLUETOOTH protocol family).

---
 crypto/af_alg.c | 2 ++
 1 file changed, 2 insertions(+)

Thanks Milan, this patch looks good to me. Crypto folks, assuming no objections, could you try to push this patch this week so it hits 3.16 proper (assuming no more -rc releases)? Without this patch the latest versions of cryptsetup could fail on a SELinux system leaving the system unable to boot with SELinux in enforcing mode.

Quoted 21 lines
crypto/af_alg.c +2 -0
index 966f893..6a3ad80 100644
@@ -21,6 +21,7 @@
 #include <linux/module.h>
 #include <linux/net.h>
 #include <linux/rwsem.h>
+#include <linux/security.h>
 
 struct alg_type_list {
 	const struct af_alg_type *type;
@@ -243,6 +244,7 @@ int af_alg_accept(struct sock *sk, struct socket
 *newsock)
 
 	sock_init_data(newsock, sk2);
 	sock_graft(sk2, newsock);
+	security_sk_clone(sk, sk2);
 
 	err = type->accept(ask->private, sk2);

if (err) {

Signature · 2 lines
paul moore
www.paul-moore.com
maintainer Applied
#3 lore raw

Re: [PATCH] crypto: properly label AF_ALG socket

In reply to Milan Broz
Quoted 7 lines · Milan Broz

Th AF_ALG socket was missing a security label (e.g. SELinux) which means that socket was in "unlabeled" state.

This was recently demonstrated in the cryptsetup package (cryptsetup v1.6.5 and later.)
See https://bugzilla.redhat.com/show_bug.cgi?id=1115120

Quoted 5 lines

This patch clones the sock's label from the parent sock and resolves the issue (similar to AF_BLUETOOTH protocol family).

Applied to crypto. Thanks.

Signature · 3 lines
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt