Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 957a9916 authored by Roberto Sassu's avatar Roberto Sassu Committed by Greg Kroah-Hartman
Browse files

smack: Retrieve transmuting information in smack_inode_getsecurity()



[ Upstream commit 3a3d8fce31a49363cc31880dce5e3b0617c9c38b ]

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: default avatarRoberto Sassu <roberto.sassu@huawei.com>
Signed-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c9ce9bab
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -1454,10 +1454,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 = smack_inode(inode);
		if (ispp->smk_flags & SMK_INODE_TRANSMUTE)
			label = TRANS_TRUE;
		else
			label = "";
	} else {
		/*
		 * The rest of the Smack xattrs are only on sockets.
		 */
@@ -1479,13 +1488,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;
}