BACKPORT: smack: fix logic in smack_inode_init_security function
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Wed, 26 Nov 2014 14:31:07 +0000 (15:31 +0100)
committerRafal Krypa <r.krypa@samsung.com>
Thu, 30 Jun 2016 12:57:42 +0000 (14:57 +0200)
In principle if this function was called with "value" == NULL and "len"
not NULL it could return different results for the "len" compared to a
case where "name" was not NULL. This is a hypothetical case that does
not exist in the kernel, but it's a logic bug nonetheless.

Signed-off-by: Lukasz Pawelczyk <l.pawelczyk@samsung.com>
(cherry-picked from upstream 68390ccf8b0a3470032f053d50379cfd49fbe952)

security/smack/smack_lsm.c

index 59d31b3e720a7a72c6b80bb80df8f73b9664bd37..fbfd3aa6f71a1d9958c949a9fe9906eec5e5d8db 100644 (file)
@@ -803,7 +803,7 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
                        return -ENOMEM;
        }
 
-       if (value) {
+       if (value && len) {
                rcu_read_lock();
                may = smk_access_entry(skp->smk_known, dsp->smk_known,
                                       &skp->smk_rules);
@@ -824,10 +824,9 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
                *value = kstrdup(isp->smk_known, GFP_KERNEL);
                if (*value == NULL)
                        return -ENOMEM;
-       }
 
-       if (len)
                *len = strlen(isp->smk_known);
+       }
 
        return 0;
 }