[PATCH 13/19] smack: restrict setxattr() SMACK64EXEC/MMAP to regular files
Konstantin Andreev
andreev at swemel.ru
Thu Jul 24 13:09:46 UTC 2025
The SMACK64EXEC and SMACK64MMAP xattrs apply
only to regular files. However, setxattr() currently
allows setting them on any filesystem object,
including FIFOs, device nodes, and others. E.g.
root# setfattr -n security.SMACK64EXEC -v foo /dev/null
root# getfattr -hn security.SMACK64EXEC /dev/null
# file: dev/null
security.SMACK64EXEC="foo"
This change restricts setting SMACK64EXEC and
SMACK64MMAP to regular files only.
Signed-off-by: Konstantin Andreev <andreev at swemel.ru>
---
security/smack/smack_lsm.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index a66fa2c16dc2..6712fa047722 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -1425,6 +1425,8 @@ static int smack_inode_setxattr(struct mnt_idmap *idmap,
return -EOPNOTSUPP;
} else if (strcmp(name, XATTR_NAME_SMACKEXEC) == 0 ||
strcmp(name, XATTR_NAME_SMACKMMAP) == 0) {
+ if (!S_ISREG(i_mode))
+ return -EOPNOTSUPP;
task_label = true;
} else if (strcmp(name, XATTR_NAME_SMACKTRANSMUTE) == 0) {
if (!S_ISDIR(i_mode) ||
@@ -3754,15 +3756,17 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
/*
* Don't let the exec or mmap label be "*" or "@".
*/
- skp = smk_fetch(XATTR_NAME_SMACKEXEC, inode, dp);
- if (IS_ERR(skp) || smk_task_invalid_label(skp))
- skp = NULL;
- isp->smk_task = skp;
+ if (S_ISREG(inode->i_mode)) {
+ skp = smk_fetch(XATTR_NAME_SMACKEXEC, inode, dp);
+ if (IS_ERR(skp) || smk_task_invalid_label(skp))
+ skp = NULL;
+ isp->smk_task = skp;
- skp = smk_fetch(XATTR_NAME_SMACKMMAP, inode, dp);
- if (IS_ERR(skp) || smk_task_invalid_label(skp))
- skp = NULL;
- isp->smk_mmap = skp;
+ skp = smk_fetch(XATTR_NAME_SMACKMMAP, inode, dp);
+ if (IS_ERR(skp) || smk_task_invalid_label(skp))
+ skp = NULL;
+ isp->smk_mmap = skp;
+ }
dput(dp);
break;
--
2.43.0
More information about the Linux-security-module-archive
mailing list