Revert "selinux: fix the default socket labeling in sock_graft()"
Subsystems (3)
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
@@ -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
@@ -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; }
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
@@ -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
Re: [PATCH] crypto: properly label AF_ALG socket
Quoted 7 lines · Milan Broz
Th
AF_ALGsocket 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_BLUETOOTHprotocol family).Signed-off-by Milan Broz <[email protected]>--- 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@@ -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
Re: [PATCH] crypto: properly label AF_ALG socket
In reply to Milan BrozQuoted 7 lines · Milan Broz
Th
AF_ALGsocket 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_BLUETOOTHprotocol family).Signed-off-by Milan Broz <[email protected]>
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