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>
Tue, 22 Mar 2016 11:49:09 +0000 (12:49 +0100)
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 ef1e935de508bb9d25d2daec6e0553341abb5e7e..fc3070e0a008a8207c9e9debbcb8150e4f6290e4 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_NOFS);
                if (*value == NULL)
                        return -ENOMEM;
-       }
 
-       if (len)
                *len = strlen(isp->smk_known);
+       }
 
        return 0;
 }