selinux: provide socketpair callback
authorDavid Herrmann <dh.herrmann@gmail.com>
Fri, 4 May 2018 14:28:21 +0000 (16:28 +0200)
committerJames Morris <james.morris@microsoft.com>
Fri, 4 May 2018 19:48:54 +0000 (12:48 -0700)
Make sure to implement the new socketpair callback so the SO_PEERSEC
call on socketpair(2)s will return correct information.

Acked-by: Serge Hallyn <serge@hallyn.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: Tom Gundersen <teg@jklm.no>
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: James Morris <james.morris@microsoft.com>
security/selinux/hooks.c

index 4cafe6a19167613cb64b29ac59c895e91285b390..02ebd1585eafef99fbb2197b37972bc1e4ddb212 100644 (file)
@@ -4569,6 +4569,18 @@ static int selinux_socket_post_create(struct socket *sock, int family,
        return err;
 }
 
+static int selinux_socket_socketpair(struct socket *socka,
+                                    struct socket *sockb)
+{
+       struct sk_security_struct *sksec_a = socka->sk->sk_security;
+       struct sk_security_struct *sksec_b = sockb->sk->sk_security;
+
+       sksec_a->peer_sid = sksec_b->sid;
+       sksec_b->peer_sid = sksec_a->sid;
+
+       return 0;
+}
+
 /* Range of port numbers used to automatically bind.
    Need to determine whether we should perform a name_bind
    permission check between the socket and the port number. */
@@ -6999,6 +7011,7 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
 
        LSM_HOOK_INIT(socket_create, selinux_socket_create),
        LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create),
+       LSM_HOOK_INIT(socket_socketpair, selinux_socket_socketpair),
        LSM_HOOK_INIT(socket_bind, selinux_socket_bind),
        LSM_HOOK_INIT(socket_connect, selinux_socket_connect),
        LSM_HOOK_INIT(socket_listen, selinux_socket_listen),