BACKPORT: Smack: Assign smack_known_web label for kernel thread's
authorjooseong lee <jooseong.lee@samsung.com>
Thu, 3 Nov 2016 10:54:39 +0000 (11:54 +0100)
committerRafal Krypa <r.krypa@samsung.com>
Mon, 21 Nov 2016 14:43:04 +0000 (15:43 +0100)
Assign smack_known_web label for kernel thread's socket

Creating struct sock by sk_alloc function in various kernel subsystems
like bluetooth doesn't call smack_socket_post_create(). In such case,
received sock label is the floor('_') label and makes access deny.

Signed-off-by: jooseong lee <jooseong.lee@samsung.com>
Acked-by: Casey Schaufler <casey@schaufler-ca.com>
(cherry-picked from upstream 08382c9f6efe08b8bb30645c2744480cbd8f161a)

security/smack/smack_lsm.c

index be0f2e27b332b5bcc1c79176f1a97f7a02305427..16e3ca101c6f4bbe5c7819faac265b806d2c9fa2 100644 (file)
@@ -2316,8 +2316,16 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags)
        if (ssp == NULL)
                return -ENOMEM;
 
-       ssp->smk_in = skp;
-       ssp->smk_out = skp;
+       /*
+        * Sockets created by kernel threads receive web label.
+        */
+       if (unlikely(current->flags & PF_KTHREAD)) {
+               ssp->smk_in = &smack_known_web;
+               ssp->smk_out = &smack_known_web;
+       } else {
+               ssp->smk_in = skp;
+               ssp->smk_out = skp;
+       }
        ssp->smk_packet = NULL;
 
        sk->sk_security = ssp;