From: Roberto Sassu <roberto.sassu@huaweicloud.com>
To: Mimi Zohar <zohar@linux.ibm.com>,
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,
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
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@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, Roberto Sassu <roberto.sassu@huawei.com>
Subject: Re: [PATCH v3 14/25] security: Introduce file_post_open hook
Date: Thu, 12 Oct 2023 14:45:38 +0200 [thread overview]
Message-ID: <e6f0e7929abda6fa6ae7ef450b6e155b420a5f5b.camel@huaweicloud.com> (raw)
In-Reply-To: <2026a46459563d8f5d132a099f402ddad8f06fae.camel@linux.ibm.com>
On Thu, 2023-10-12 at 08:36 -0400, Mimi Zohar wrote:
> On Mon, 2023-09-04 at 15:34 +0200, Roberto Sassu wrote:
> > 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.
> >
> > It is useful for IMA to calculate the dhigest of the file content, and to
> > decide based on that digest whether the file should be made accessible to
> > the requesting process.
>
> Please remove "It is usefile for". Perhaps something along the lines:
>
>
> Based on policy, IMA calculates the digest of the file content and
> decides ...
Ok.
> >
> > LSMs should use this hook instead of file_open, if they need to make their
> > decision based on an opened file (for example by inspecting the file
> > content). The file is not open yet in the file_open hook.
>
> The security hooks were originally defined for enforcing access
> control. As a result the hooks were placed before the action. The
> usage of the LSM hooks is not limited to just enforcing access control
> these days. For IMA/EVM to become full LSMs additional hooks are
> needed post action. Other LSMs, probably non-access control ones,
> could similarly take some action post action, in this case successful
> file open.
I don't know, I would not exclude LSMs to enforce access control. The
post action can be used to update the state, which can be used to check
next accesses (exactly what happens for EVM).
> Having to justify the new LSM post hooks in terms of the existing LSMs,
> which enforce access control, is really annoying and makes no sense.
> Please don't.
Well, there is a relationship between the pre and post. But if you
prefer, I remove this comparison.
Thanks
Roberto
> > The new hook can
> > return an error and can cause the open to be aborted.
>
> Please make this a separate pagraph.
>
> > 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 1f5ec71360de..7dc4626859f0 100644
> > --- a/fs/namei.c
> > +++ b/fs/namei.c
> > @@ -3634,6 +3634,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 8a2321d19194..3450bb1c8a18 100644
> > --- a/fs/nfsd/vfs.c
> > +++ b/fs/nfsd/vfs.c
> > @@ -862,6 +862,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 1153e7163b8b..60ed33f0c80d 100644
> > --- a/include/linux/lsm_hook_defs.h
> > +++ b/include/linux/lsm_hook_defs.h
> > @@ -188,6 +188,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 665bba3e0081..a0f16511c059 100644
> > --- a/include/linux/security.h
> > +++ b/include/linux/security.h
> > @@ -403,6 +403,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);
> > @@ -1044,6 +1045,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 3947159ba5e9..3e0078b51e46 100644
> > --- a/security/security.c
> > +++ b/security/security.c
> > @@ -2856,6 +2856,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
>
> The LSM post hooks aren't needed to enforce access control. Probably
> better to say something along the lines of "take some action after
> successful file open".
>
> > + * @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.
>
> And reword the above accordingly.
>
> > + *
> > + * 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
>
next prev parent reply other threads:[~2023-10-12 12:46 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-04 13:33 [PATCH v3 00/25] security: Move IMA and EVM to the LSM infrastructure Roberto Sassu
2023-09-04 13:33 ` [PATCH v3 01/25] ima: Align ima_inode_post_setattr() definition with " Roberto Sassu
2023-10-11 14:26 ` Mimi Zohar
2023-09-04 13:33 ` [PATCH v3 02/25] ima: Align ima_post_path_mknod() " Roberto Sassu
2023-09-05 17:23 ` Stefan Berger
2023-10-11 14:38 ` Mimi Zohar
2023-10-11 16:02 ` Roberto Sassu
2023-10-11 19:01 ` Mimi Zohar
2023-10-12 7:29 ` Roberto Sassu
2023-10-12 11:42 ` Mimi Zohar
2023-10-12 12:19 ` Roberto Sassu
2023-10-12 13:25 ` Mimi Zohar
2023-10-12 13:33 ` Roberto Sassu
2023-10-12 17:10 ` Mimi Zohar
2023-10-13 7:38 ` Roberto Sassu
2023-09-04 13:33 ` [PATCH v3 03/25] ima: Align ima_post_create_tmpfile() " Roberto Sassu
2023-09-05 17:26 ` Stefan Berger
2023-09-04 13:33 ` [PATCH v3 04/25] ima: Align ima_file_mprotect() " Roberto Sassu
2023-10-11 14:51 ` Mimi Zohar
2023-10-11 15:43 ` Roberto Sassu
2023-10-11 20:17 ` Mimi Zohar
2023-09-04 13:33 ` [PATCH v3 05/25] ima: Align ima_inode_setxattr() " Roberto Sassu
2023-10-11 19:20 ` Mimi Zohar
2023-09-04 13:33 ` [PATCH v3 06/25] ima: Align ima_inode_removexattr() " Roberto Sassu
2023-09-04 13:33 ` [PATCH v3 07/25] ima: Align ima_post_read_file() " Roberto Sassu
2023-10-12 0:07 ` Mimi Zohar
2023-09-04 13:33 ` [PATCH v3 08/25] evm: Align evm_inode_post_setattr() " Roberto Sassu
2023-10-12 0:07 ` Mimi Zohar
2023-09-04 13:33 ` [PATCH v3 09/25] evm: Align evm_inode_setxattr() " Roberto Sassu
2023-10-12 0:08 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 10/25] evm: Align evm_inode_post_setxattr() " Roberto Sassu
2023-10-12 0:08 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 11/25] security: Align inode_setattr hook definition with EVM Roberto Sassu
2023-10-12 0:08 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 12/25] security: Introduce inode_post_setattr hook Roberto Sassu
2023-09-05 17:40 ` Stefan Berger
2023-09-26 11:14 ` Roberto Sassu
2023-10-12 0:08 ` Mimi Zohar
2023-10-12 7:42 ` Roberto Sassu
2023-10-12 11:43 ` Mimi Zohar
2023-10-12 12:25 ` Roberto Sassu
2023-09-04 13:34 ` [PATCH v3 13/25] security: Introduce inode_post_removexattr hook Roberto Sassu
2023-09-05 17:55 ` Stefan Berger
2023-10-12 0:09 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 14/25] security: Introduce file_post_open hook Roberto Sassu
2023-09-05 18:10 ` Stefan Berger
2023-10-12 12:36 ` Mimi Zohar
2023-10-12 12:45 ` Roberto Sassu [this message]
2023-10-12 13:35 ` Mimi Zohar
2023-10-12 13:49 ` Roberto Sassu
2023-09-04 13:34 ` [PATCH v3 15/25] security: Introduce file_pre_free_security hook Roberto Sassu
2023-09-05 18:36 ` Stefan Berger
2023-10-13 13:50 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 16/25] security: Introduce path_post_mknod hook Roberto Sassu
2023-09-05 18:48 ` Stefan Berger
2023-10-13 13:12 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 17/25] security: Introduce inode_post_create_tmpfile hook Roberto Sassu
2023-09-05 18:52 ` Stefan Berger
2023-10-13 13:18 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 18/25] security: Introduce inode_post_set_acl hook Roberto Sassu
2023-09-05 19:00 ` Stefan Berger
2023-10-13 13:27 ` Mimi Zohar
2023-09-04 13:34 ` [PATCH v3 19/25] security: Introduce inode_post_remove_acl hook Roberto Sassu
2023-09-05 19:01 ` Stefan Berger
2023-09-04 13:40 ` [PATCH v3 20/25] security: Introduce key_post_create_or_update hook Roberto Sassu
2023-09-05 19:04 ` Stefan Berger
2023-09-26 11:15 ` Roberto Sassu
2023-10-13 13:37 ` Mimi Zohar
2023-09-04 13:40 ` [PATCH v3 21/25] ima: Move to LSM infrastructure Roberto Sassu
2023-09-05 19:17 ` Stefan Berger
2023-10-13 16:55 ` Mimi Zohar
2023-09-04 13:40 ` [PATCH v3 22/25] ima: Move IMA-Appraisal " Roberto Sassu
2023-09-05 20:54 ` Stefan Berger
2023-09-04 13:40 ` [PATCH v3 23/25] evm: Move " Roberto Sassu
2023-09-04 13:40 ` [PATCH v3 24/25] integrity: Move integrity functions to the " Roberto Sassu
2023-09-04 13:40 ` [PATCH v3 25/25] integrity: Switch from rbtree to LSM-managed blob for integrity_iint_cache Roberto Sassu
2023-09-12 16:19 ` Stefan Berger
2023-09-15 9:39 ` Roberto Sassu
2023-10-13 11:31 ` Roberto Sassu
2023-10-13 19:45 ` [PATCH v3 00/25] security: Move IMA and EVM to the LSM infrastructure Mimi Zohar
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=e6f0e7929abda6fa6ae7ef450b6e155b420a5f5b.camel@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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).