All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roberto Sassu <roberto.sassu@huaweicloud.com>
To: viro@zeniv.linux.org.uk, chuck.lever@oracle.com,
	jlayton@kernel.org, zohar@linux.ibm.com,
	dmitry.kasatkin@gmail.com, paul@paul-moore.com,
	jmorris@namei.org, serge@hallyn.com, dhowells@redhat.com,
	jarkko@kernel.org, stephen.smalley.work@gmail.com,
	eparis@parisplace.org, casey@schaufler-ca.com,
	brauner@kernel.org
Cc: linux-fsdevel@vger.kernel.org, linux-nfs@vger.kernel.org,
	linux-integrity@vger.kernel.org,
	linux-security-module@vger.kernel.org, keyrings@vger.kernel.org,
	selinux@vger.kernel.org, linux-kernel@vger.kernel.org,
	stefanb@linux.ibm.com, Roberto Sassu <roberto.sassu@huawei.com>
Subject: [PATCH 16/28] security: Introduce file_post_open hook
Date: Fri,  3 Mar 2023 19:18:30 +0100	[thread overview]
Message-ID: <20230303181842.1087717-17-roberto.sassu@huaweicloud.com> (raw)
In-Reply-To: <20230303181842.1087717-1-roberto.sassu@huaweicloud.com>

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

In preparation to move IMA and EVM to the LSM infrastructure, introduce the
file_post_open hook. Also, export security_file_post_open() for NFS.

Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
---
 fs/namei.c                    |  2 ++
 fs/nfsd/vfs.c                 |  6 ++++++
 include/linux/lsm_hook_defs.h |  1 +
 include/linux/security.h      |  6 ++++++
 security/security.c           | 17 +++++++++++++++++
 5 files changed, 32 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index b4c52c4890b..41f7fdf4657 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3558,6 +3558,8 @@ static int do_open(struct nameidata *nd,
 	error = may_open(idmap, &nd->path, acc_mode, open_flag);
 	if (!error && !(file->f_mode & FMODE_OPENED))
 		error = vfs_open(&nd->path, file);
+	if (!error)
+		error = security_file_post_open(file, op->acc_mode);
 	if (!error)
 		error = ima_file_check(file, op->acc_mode);
 	if (!error && do_truncate)
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index e7462b5e5f1..4b86c158ffb 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -852,6 +852,12 @@ __nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,
 		goto out_nfserr;
 	}
 
+	host_err = security_file_post_open(file, may_flags);
+	if (host_err) {
+		fput(file);
+		goto out_nfserr;
+	}
+
 	host_err = ima_file_check(file, may_flags);
 	if (host_err) {
 		fput(file);
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
index 2ae5224d967..5d4e256e250 100644
--- a/include/linux/lsm_hook_defs.h
+++ b/include/linux/lsm_hook_defs.h
@@ -187,6 +187,7 @@ LSM_HOOK(int, 0, file_send_sigiotask, struct task_struct *tsk,
 	 struct fown_struct *fown, int sig)
 LSM_HOOK(int, 0, file_receive, struct file *file)
 LSM_HOOK(int, 0, file_open, struct file *file)
+LSM_HOOK(int, 0, file_post_open, struct file *file, int mask)
 LSM_HOOK(int, 0, file_truncate, struct file *file)
 LSM_HOOK(int, 0, task_alloc, struct task_struct *task,
 	 unsigned long clone_flags)
diff --git a/include/linux/security.h b/include/linux/security.h
index b511f608958..4fdc62a1b42 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -402,6 +402,7 @@ int security_file_send_sigiotask(struct task_struct *tsk,
 				 struct fown_struct *fown, int sig);
 int security_file_receive(struct file *file);
 int security_file_open(struct file *file);
+int security_file_post_open(struct file *file, int mask);
 int security_file_truncate(struct file *file);
 int security_task_alloc(struct task_struct *task, unsigned long clone_flags);
 void security_task_free(struct task_struct *task);
@@ -1043,6 +1044,11 @@ static inline int security_file_open(struct file *file)
 	return 0;
 }
 
+static inline int security_file_post_open(struct file *file, int mask)
+{
+	return 0;
+}
+
 static inline int security_file_truncate(struct file *file)
 {
 	return 0;
diff --git a/security/security.c b/security/security.c
index 6bf4a92db94..e252c87df4f 100644
--- a/security/security.c
+++ b/security/security.c
@@ -2906,6 +2906,23 @@ int security_file_open(struct file *file)
 	return fsnotify_perm(file, MAY_OPEN);
 }
 
+/**
+ * security_file_post_open() - Recheck access to a file after it has been opened
+ * @file: the file
+ * @mask: access mask
+ *
+ * Recheck access with mask after the file has been opened. The hook is useful
+ * for LSMs that require the file content to be available in order to make
+ * decisions.
+ *
+ * Return: Returns 0 if permission is granted.
+ */
+int security_file_post_open(struct file *file, int mask)
+{
+	return call_int_hook(file_post_open, 0, file, mask);
+}
+EXPORT_SYMBOL_GPL(security_file_post_open);
+
 /**
  * security_file_truncate() - Check if truncating a file is allowed
  * @file: file
-- 
2.25.1


  parent reply	other threads:[~2023-03-03 18:22 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-03 18:18 [PATCH 00/28] security: Move IMA and EVM to the LSM infrastructure Roberto Sassu
2023-03-03 18:18 ` [PATCH 01/28] ima: Align ima_inode_post_setattr() definition with " Roberto Sassu
2023-03-06 16:46   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 02/28] ima: Align ima_post_path_mknod() " Roberto Sassu
2023-03-06 16:52   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 03/28] ima: Align ima_post_create_tmpfile() " Roberto Sassu
2023-03-06 16:53   ` Stefan Berger
2023-03-08 15:15   ` Mimi Zohar
2023-03-09  9:11     ` Roberto Sassu
2023-03-03 18:18 ` [PATCH 04/28] ima: Align ima_file_mprotect() " Roberto Sassu
2023-03-06 16:56   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 05/28] ima: Align ima_inode_setxattr() " Roberto Sassu
2023-03-06 16:57   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 06/28] ima: Align ima_inode_removexattr() " Roberto Sassu
2023-03-06 16:58   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 07/28] ima: Align ima_post_read_file() " Roberto Sassu
2023-03-06 16:59   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 08/28] evm: Align evm_inode_post_setattr() " Roberto Sassu
2023-03-06 17:00   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 09/28] evm: Align evm_inode_setxattr() " Roberto Sassu
2023-03-06 17:01   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 10/28] evm: Align evm_inode_post_setxattr() " Roberto Sassu
2023-03-06 17:02   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 11/28] evm: Complete description of evm_inode_setattr() Roberto Sassu
2023-03-06 17:04   ` Stefan Berger
2023-03-07  8:58     ` Roberto Sassu
2023-03-03 18:18 ` [PATCH 12/28] fs: Fix description of vfs_tmpfile() Roberto Sassu
2023-03-06 10:28   ` Christian Brauner
2023-03-06 10:31     ` Roberto Sassu
2023-03-03 18:18 ` [PATCH 13/28] security: Align inode_setattr hook definition with EVM Roberto Sassu
2023-03-05  0:42   ` Casey Schaufler
2023-03-06 17:06   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 14/28] security: Introduce inode_post_setattr hook Roberto Sassu
2023-03-06 17:08   ` Stefan Berger
2023-03-08 15:19   ` Mimi Zohar
2023-03-03 18:18 ` [PATCH 15/28] security: Introduce inode_post_removexattr hook Roberto Sassu
2023-03-06 19:17   ` Stefan Berger
2023-03-08 15:43   ` Mimi Zohar
2023-03-09 13:07     ` Roberto Sassu
2023-08-30  9:31     ` Roberto Sassu
2023-08-30  9:53       ` Christian Brauner
2023-03-03 18:18 ` Roberto Sassu [this message]
2023-03-06 19:24   ` [PATCH 16/28] security: Introduce file_post_open hook Stefan Berger
2023-03-03 18:18 ` [PATCH 17/28] security: Introduce file_pre_free_security hook Roberto Sassu
2023-03-06 19:26   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 18/28] security: Introduce path_post_mknod hook Roberto Sassu
2023-03-06 19:29   ` Stefan Berger
2023-03-08 15:47   ` Mimi Zohar
2023-03-03 18:18 ` [PATCH 19/28] security: Introduce inode_post_create_tmpfile hook Roberto Sassu
2023-03-06 19:35   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 20/28] security: Introduce inode_post_set_acl hook Roberto Sassu
2023-03-06 19:45   ` Stefan Berger
2023-03-03 18:18 ` [PATCH 21/28] security: Introduce inode_post_remove_acl hook Roberto Sassu
2023-03-06 15:22   ` Stefan Berger
2023-03-06 15:34     ` Roberto Sassu
2023-03-06 16:16       ` Stefan Berger
2023-03-06 16:50         ` Roberto Sassu
2023-03-03 18:18 ` [PATCH 22/28] security: Introduce key_post_create_or_update hook Roberto Sassu
2023-03-07 17:48   ` Stefan Berger
2023-03-08 15:49   ` Mimi Zohar
2023-03-03 18:25 ` [PATCH 23/28] security: Introduce LSM_ORDER_LAST Roberto Sassu
2023-03-07 18:04   ` Stefan Berger
2023-03-08  8:06     ` Roberto Sassu
2023-03-08 13:13   ` Mimi Zohar
2023-03-08 13:26     ` Roberto Sassu
2023-03-08 14:00       ` Mimi Zohar
2023-03-08 14:35         ` Roberto Sassu
2023-03-08 15:52           ` Mimi Zohar
2023-03-03 18:25 ` [PATCH 24/28] ima: Move to LSM infrastructure Roberto Sassu
2023-03-03 18:25 ` [PATCH 25/28] ima: Move IMA-Appraisal " Roberto Sassu
2023-03-03 18:26 ` [PATCH 26/28] evm: Move " Roberto Sassu
2023-03-04 21:36   ` Casey Schaufler
2023-03-06  9:21     ` Roberto Sassu
2023-03-07 16:54       ` Casey Schaufler
2023-03-07 16:57         ` Roberto Sassu
2023-03-03 18:26 ` [PATCH 27/28] integrity: Move integrity functions to the " Roberto Sassu
2023-03-03 18:26 ` [PATCH 28/28] integrity: Switch from rbtree to LSM-managed blob for integrity_iint_cache Roberto Sassu
2023-03-08 15:14 ` [PATCH 00/28] security: Move IMA and EVM to the LSM infrastructure Mimi Zohar
2023-03-08 16:23   ` 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=20230303181842.1087717-17-roberto.sassu@huaweicloud.com \
    --to=roberto.sassu@huaweicloud.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=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=paul@paul-moore.com \
    --cc=roberto.sassu@huawei.com \
    --cc=selinux@vger.kernel.org \
    --cc=serge@hallyn.com \
    --cc=stefanb@linux.ibm.com \
    --cc=stephen.smalley.work@gmail.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.