All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roberto Sassu <roberto.sassu@huaweicloud.com>
To: viro@zeniv.linux.org.uk, brauner@kernel.org,
	chuck.lever@oracle.com, jlayton@kernel.org, neilb@suse.de,
	kolga@netapp.com, Dai.Ngo@oracle.com, tom@talpey.com,
	paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com,
	zohar@linux.ibm.com, dmitry.kasatkin@gmail.com,
	dhowells@redhat.com, jarkko@kernel.org,
	stephen.smalley.work@gmail.com, eparis@parisplace.org,
	casey@schaufler-ca.com, mic@digikod.net
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-nfs@vger.kernel.org, linux-security-module@vger.kernel.org,
	linux-integrity@vger.kernel.org, keyrings@vger.kernel.org,
	selinux@vger.kernel.org, Roberto Sassu <roberto.sassu@huawei.com>
Subject: [PATCH v6 15/25] security: Introduce inode_post_create_tmpfile hook
Date: Mon, 20 Nov 2023 18:33:08 +0100	[thread overview]
Message-ID: <20231120173318.1132868-16-roberto.sassu@huaweicloud.com> (raw)
In-Reply-To: <20231120173318.1132868-1-roberto.sassu@huaweicloud.com>

From: Roberto Sassu <roberto.sassu@huawei.com>

In preparation for moving IMA and EVM to the LSM infrastructure, introduce
the inode_post_create_tmpfile hook.

As temp files can be made persistent, treat new temp files like other new
files, so that the file hash is calculated and stored in the security
xattr.

LSMs could also take some action after temp files have been created.

The new hook cannot return an error and cannot cause the operation to be
canceled.

Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Acked-by: Casey Schaufler <casey@schaufler-ca.com>
Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
---
 fs/namei.c                    |  1 +
 include/linux/lsm_hook_defs.h |  2 ++
 include/linux/security.h      |  6 ++++++
 security/security.c           | 15 +++++++++++++++
 4 files changed, 24 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index b7f433720b1e..adb3ab27951a 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3686,6 +3686,7 @@ static int vfs_tmpfile(struct mnt_idmap *idmap,
 		inode->i_state |= I_LINKABLE;
 		spin_unlock(&inode->i_lock);
 	}
+	security_inode_post_create_tmpfile(idmap, inode);
 	ima_post_create_tmpfile(idmap, inode);
 	return 0;
 }
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
index ee5ab180a312..4b195996f848 100644
--- a/include/linux/lsm_hook_defs.h
+++ b/include/linux/lsm_hook_defs.h
@@ -121,6 +121,8 @@ LSM_HOOK(int, 0, inode_init_security_anon, struct inode *inode,
 	 const struct qstr *name, const struct inode *context_inode)
 LSM_HOOK(int, 0, inode_create, struct inode *dir, struct dentry *dentry,
 	 umode_t mode)
+LSM_HOOK(void, LSM_RET_VOID, inode_post_create_tmpfile, struct mnt_idmap *idmap,
+	 struct inode *inode)
 LSM_HOOK(int, 0, inode_link, struct dentry *old_dentry, struct inode *dir,
 	 struct dentry *new_dentry)
 LSM_HOOK(int, 0, inode_unlink, struct inode *dir, struct dentry *dentry)
diff --git a/include/linux/security.h b/include/linux/security.h
index 5f595135c8f2..d77b717b5a45 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -344,6 +344,8 @@ int security_inode_init_security_anon(struct inode *inode,
 				      const struct qstr *name,
 				      const struct inode *context_inode);
 int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode);
+void security_inode_post_create_tmpfile(struct mnt_idmap *idmap,
+					struct inode *inode);
 int security_inode_link(struct dentry *old_dentry, struct inode *dir,
 			 struct dentry *new_dentry);
 int security_inode_unlink(struct inode *dir, struct dentry *dentry);
@@ -809,6 +811,10 @@ static inline int security_inode_create(struct inode *dir,
 	return 0;
 }
 
+static inline void
+security_inode_post_create_tmpfile(struct mnt_idmap *idmap, struct inode *inode)
+{ }
+
 static inline int security_inode_link(struct dentry *old_dentry,
 				       struct inode *dir,
 				       struct dentry *new_dentry)
diff --git a/security/security.c b/security/security.c
index b0203c488d17..a1bdf4859448 100644
--- a/security/security.c
+++ b/security/security.c
@@ -2013,6 +2013,21 @@ int security_inode_create(struct inode *dir, struct dentry *dentry,
 }
 EXPORT_SYMBOL_GPL(security_inode_create);
 
+/**
+ * security_inode_post_create_tmpfile() - Update inode security of new tmpfile
+ * @idmap: idmap of the mount
+ * @inode: inode of the new tmpfile
+ *
+ * Update inode security data after a tmpfile has been created.
+ */
+void security_inode_post_create_tmpfile(struct mnt_idmap *idmap,
+					struct inode *inode)
+{
+	if (unlikely(IS_PRIVATE(inode)))
+		return;
+	call_void_hook(inode_post_create_tmpfile, idmap, inode);
+}
+
 /**
  * security_inode_link() - Check if creating a hard link is allowed
  * @old_dentry: existing file
-- 
2.34.1


  parent reply	other threads:[~2023-11-20 17:38 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-20 17:32 [PATCH v6 00/25] security: Move IMA and EVM to the LSM infrastructure Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 01/25] ima: Align ima_inode_post_setattr() definition with " Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 02/25] ima: Align ima_file_mprotect() " Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 03/25] ima: Align ima_inode_setxattr() " Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 04/25] ima: Align ima_inode_removexattr() " Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 05/25] ima: Align ima_post_read_file() " Roberto Sassu
2023-11-20 17:32 ` [PATCH v6 06/25] evm: Align evm_inode_post_setattr() " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 07/25] evm: Align evm_inode_setxattr() " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 08/25] evm: Align evm_inode_post_setxattr() " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 09/25] security: Align inode_setattr hook definition with EVM Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 10/25] security: Introduce inode_post_setattr hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 11/25] security: Introduce inode_post_removexattr hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 12/25] security: Introduce file_post_open hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 13/25] security: Introduce file_release hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 14/25] security: Introduce path_post_mknod hook Roberto Sassu
2023-11-20 17:33 ` Roberto Sassu [this message]
2023-11-20 17:33 ` [PATCH v6 16/25] security: Introduce inode_post_set_acl hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 17/25] security: Introduce inode_post_remove_acl hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 18/25] security: Introduce key_post_create_or_update hook Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 19/25] ima: Move to LSM infrastructure Roberto Sassu
2023-11-21  8:02   ` Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 20/25] ima: Move IMA-Appraisal " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 21/25] evm: Move " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 22/25] ima: Remove dependency on 'integrity' LSM Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 23/25] evm: " Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 24/25] integrity: Remove LSM Roberto Sassu
2023-11-20 17:33 ` [PATCH v6 25/25] security: Enforce ordering of 'ima' and 'evm' LSMs Roberto Sassu
2023-11-21  0:50   ` Casey Schaufler
2023-11-21  7:57     ` Roberto Sassu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231120173318.1132868-16-roberto.sassu@huaweicloud.com \
    --to=roberto.sassu@huaweicloud.com \
    --cc=Dai.Ngo@oracle.com \
    --cc=brauner@kernel.org \
    --cc=casey@schaufler-ca.com \
    --cc=chuck.lever@oracle.com \
    --cc=dhowells@redhat.com \
    --cc=dmitry.kasatkin@gmail.com \
    --cc=eparis@parisplace.org \
    --cc=jarkko@kernel.org \
    --cc=jlayton@kernel.org \
    --cc=jmorris@namei.org \
    --cc=keyrings@vger.kernel.org \
    --cc=kolga@netapp.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=mic@digikod.net \
    --cc=neilb@suse.de \
    --cc=paul@paul-moore.com \
    --cc=roberto.sassu@huawei.com \
    --cc=selinux@vger.kernel.org \
    --cc=serge@hallyn.com \
    --cc=stephen.smalley.work@gmail.com \
    --cc=tom@talpey.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=zohar@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.