aboutsummaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authorGravatar Roberto Sassu <roberto.sassu@huawei.com> 2024-02-15 11:30:59 +0100
committerGravatar Paul Moore <paul@paul-moore.com> 2024-02-15 23:43:42 -0500
commitdae52cbf5887ac51c3574648124cfe475a9b3246 (patch)
treeebba0f72a35b8983541589e03cc7ff0362a40a59 /security
parentsecurity: Introduce inode_post_setattr hook (diff)
downloadlinux-dae52cbf5887ac51c3574648124cfe475a9b3246.tar.gz
linux-dae52cbf5887ac51c3574648124cfe475a9b3246.tar.bz2
linux-dae52cbf5887ac51c3574648124cfe475a9b3246.zip
security: Introduce inode_post_removexattr hook
In preparation for moving IMA and EVM to the LSM infrastructure, introduce the inode_post_removexattr hook. At inode_removexattr hook, EVM verifies the file's existing HMAC value. At inode_post_removexattr, EVM re-calculates the file's HMAC with the passed xattr removed and other file metadata. Other LSMs could similarly take some action after successful xattr removal. The new hook cannot return an error and cannot cause the operation to be reverted. Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com> Reviewed-by: Mimi Zohar <zohar@linux.ibm.com> Reviewed-by: Casey Schaufler <casey@schaufler-ca.com> Acked-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Paul Moore <paul@paul-moore.com>
Diffstat (limited to 'security')
-rw-r--r--security/security.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/security/security.c b/security/security.c
index 56527d5415e2..d77fdd3ca1bc 100644
--- a/security/security.c
+++ b/security/security.c
@@ -2453,6 +2453,20 @@ int security_inode_removexattr(struct mnt_idmap *idmap,
}
/**
+ * security_inode_post_removexattr() - Update the inode after a removexattr op
+ * @dentry: file
+ * @name: xattr name
+ *
+ * Update the inode after a successful removexattr operation.
+ */
+void security_inode_post_removexattr(struct dentry *dentry, const char *name)
+{
+ if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
+ return;
+ call_void_hook(inode_post_removexattr, dentry, name);
+}
+
+/**
* security_inode_need_killpriv() - Check if security_inode_killpriv() required
* @dentry: associated dentry
*