BACKPORT: Smack: secmark connections
authorCasey Schaufler <casey@schaufler-ca.com>
Wed, 11 Feb 2015 20:52:32 +0000 (12:52 -0800)
committerRafal Krypa <r.krypa@samsung.com>
Thu, 3 Nov 2016 16:41:54 +0000 (17:41 +0100)
If the secmark is available us it on connection as
well as packet delivery.

Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
(cherry-picked from upstream 7f368ad34f0657f4bc39bf5bad6692b5a81a1194)

security/smack/smack_lsm.c

index 6f8ad700b22b4769031b79cae4773429a97d340a..04462a26e61962ed7a6de72b6c88b99bd47c3dbc 100644 (file)
@@ -3819,6 +3819,18 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb,
        }
 #endif /* CONFIG_IPV6 */
 
+#ifdef CONFIG_SECURITY_SMACK_NETFILTER
+       /*
+        * If there is a secmark use it rather than the CIPSO label.
+        * If there is no secmark fall back to CIPSO.
+        * The secmark is assumed to reflect policy better.
+        */
+       if (skb && skb->secmark != 0) {
+               skp = smack_from_secid(skb->secmark);
+               goto access_check;
+       }
+#endif /* CONFIG_SECURITY_SMACK_NETFILTER */
+
        netlbl_secattr_init(&secattr);
        rc = netlbl_skbuff_getattr(skb, family, &secattr);
        if (rc == 0)
@@ -3827,6 +3839,10 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb,
                skp = &smack_known_huh;
        netlbl_secattr_destroy(&secattr);
 
+#ifdef CONFIG_SECURITY_SMACK_NETFILTER
+access_check:
+#endif
+
 #ifdef CONFIG_AUDIT
        smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
        ad.a.u.net->family = family;