Smack: Provide information for UDS getsockopt(SO_PEERCRED)
authorCasey Schaufler <casey@schaufler-ca.com>
Mon, 26 Sep 2011 21:43:39 +0000 (14:43 -0700)
committerCasey Schaufler <cschaufler@cschaufler-intel.(none)>
Wed, 12 Oct 2011 21:27:05 +0000 (14:27 -0700)
This patch is targeted for the smack-next tree.

This patch takes advantage of the recent changes for performance
and points the packet labels on UDS connect at the output label of
the far side. This makes getsockopt(...SO_PEERCRED...) function
properly. Without this change the getsockopt does not provide any
information.

Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smack_lsm.c

index 6a82265413275e819098535b955e1f53c68fdf16..dab8af17ef38d28913e1b631fb8a7f2d2f1f7bfe 100644 (file)
@@ -2773,6 +2773,7 @@ static int smack_unix_stream_connect(struct sock *sock,
 {
        struct socket_smack *ssp = sock->sk_security;
        struct socket_smack *osp = other->sk_security;
+       struct socket_smack *nsp = newsk->sk_security;
        struct smk_audit_info ad;
        int rc = 0;
 
@@ -2782,6 +2783,14 @@ static int smack_unix_stream_connect(struct sock *sock,
        if (!capable(CAP_MAC_OVERRIDE))
                rc = smk_access(ssp->smk_out, osp->smk_in, MAY_WRITE, &ad);
 
+       /*
+        * Cross reference the peer labels for SO_PEERSEC.
+        */
+       if (rc == 0) {
+               nsp->smk_packet = ssp->smk_out;
+               ssp->smk_packet = osp->smk_out;
+       }
+
        return rc;
 }