smack: Retrieve transmuting information in smack_inode_getsecurity()
commit3a3d8fce31upstream. Enhance smack_inode_getsecurity() to retrieve the value for SMACK64TRANSMUTE from the inode security blob, similarly to SMACK64. This helps to display accurate values in the situation where the security labels come from mount options and not from xattrs. Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> [4.19: adjusted for the lack of helper functions] Fixes:d6d80cb57b("Smack: Base support for overlayfs") Signed-off-by: Munehisa Kamata <kamatam@amazon.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
db01c2bf6b
commit
24416f2ac0
@@ -1490,10 +1490,19 @@ static int smack_inode_getsecurity(struct inode *inode,
|
||||
struct super_block *sbp;
|
||||
struct inode *ip = (struct inode *)inode;
|
||||
struct smack_known *isp;
|
||||
struct inode_smack *ispp;
|
||||
size_t label_len;
|
||||
char *label = NULL;
|
||||
|
||||
if (strcmp(name, XATTR_SMACK_SUFFIX) == 0)
|
||||
if (strcmp(name, XATTR_SMACK_SUFFIX) == 0) {
|
||||
isp = smk_of_inode(inode);
|
||||
else {
|
||||
} else if (strcmp(name, XATTR_SMACK_TRANSMUTE) == 0) {
|
||||
ispp = inode->i_security;
|
||||
if (ispp->smk_flags & SMK_INODE_TRANSMUTE)
|
||||
label = TRANS_TRUE;
|
||||
else
|
||||
label = "";
|
||||
} else {
|
||||
/*
|
||||
* The rest of the Smack xattrs are only on sockets.
|
||||
*/
|
||||
@@ -1515,13 +1524,18 @@ static int smack_inode_getsecurity(struct inode *inode,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!label)
|
||||
label = isp->smk_known;
|
||||
|
||||
label_len = strlen(label);
|
||||
|
||||
if (alloc) {
|
||||
*buffer = kstrdup(isp->smk_known, GFP_KERNEL);
|
||||
*buffer = kstrdup(label, GFP_KERNEL);
|
||||
if (*buffer == NULL)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return strlen(isp->smk_known);
|
||||
return label_len;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user