BACKPORT: smack: Fix a bidirectional UDS connect check typo
authorZbigniew Jasinski <z.jasinski@samsung.com>
Mon, 29 Dec 2014 14:34:58 +0000 (15:34 +0100)
committerRafal Krypa <r.krypa@samsung.com>
Tue, 22 Mar 2016 11:49:10 +0000 (12:49 +0100)
The 54e70ec5eb090193b03e69d551fa6771a5a217c4 commit introduced a
bidirectional check that should have checked for mutual WRITE access
between two labels. Due to a typo subject's OUT label is checked with
object's OUT. Should be OUT to IN.

Signed-off-by: Zbigniew Jasinski <z.jasinski@samsung.com>
(cherry-picked from upstream 96be7b5424948ae39d29d5149eaec0bd6edd7404)

security/smack/smack_lsm.c

index f03c41532bfb6b6dc627405ed40608b6840abf35..8b84bd6a101604e2ffc429d6aca70e19b5116aee 100644 (file)
@@ -3316,7 +3316,7 @@ static int smack_unix_stream_connect(struct sock *sock,
 
        if (!smack_privileged(CAP_MAC_OVERRIDE)) {
                skp = ssp->smk_out;
-               okp = osp->smk_out;
+               okp = osp->smk_in;
 #ifdef CONFIG_AUDIT
                smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
                smk_ad_setfield_u_net_sk(&ad, other);
@@ -3324,6 +3324,8 @@ static int smack_unix_stream_connect(struct sock *sock,
                rc = smk_access(skp, okp, MAY_WRITE, &ad);
                rc = smk_bu_note("UDS connect", skp, okp, MAY_WRITE, rc);
                if (rc == 0) {
+                       okp = osp->smk_out;
+                       skp = ssp->smk_in;
                        rc = smk_access(okp, skp, MAY_WRITE, NULL);
                        rc = smk_bu_note("UDS connect", okp, skp,
                                                MAY_WRITE, rc);