linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mimi Zohar <zohar@linux.ibm.com>
To: Roberto Sassu <roberto.sassu@huaweicloud.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 02/25] ima: Align ima_post_path_mknod() definition with LSM infrastructure
Date: Thu, 12 Oct 2023 07:42:57 -0400	[thread overview]
Message-ID: <c16551704db68c6e0ba89c729c892e9401f05dfc.camel@linux.ibm.com> (raw)
In-Reply-To: <16c8c95f2e63ab9a2fba8cba919bf129d0541b61.camel@huaweicloud.com>

On Thu, 2023-10-12 at 09:29 +0200, Roberto Sassu wrote:
> On Wed, 2023-10-11 at 15:01 -0400, Mimi Zohar wrote:
> > On Wed, 2023-10-11 at 18:02 +0200, Roberto Sassu wrote:
> > > On Wed, 2023-10-11 at 10:38 -0400, Mimi Zohar wrote:
> > > > On Mon, 2023-09-04 at 15:33 +0200, Roberto Sassu wrote:
> > > > > From: Roberto Sassu <roberto.sassu@huawei.com>
> > > > > 
> > > > > Change ima_post_path_mknod() definition, so that it can be registered as
> > > > > implementation of the path_post_mknod hook. Since LSMs see a umask-stripped
> > > > > mode from security_path_mknod(), pass the same to ima_post_path_mknod() as
> > > > > well.
> > > > > Also, make sure that ima_post_path_mknod() is executed only if
> > > > > (mode & S_IFMT) is equal to zero or S_IFREG.
> > > > > 
> > > > > Add this check to take into account the different placement of the
> > > > > path_post_mknod hook (to be introduced) in do_mknodat().
> > > > 
> > > > Move "(to be introduced)" to when it is first mentioned.
> > > > 
> > > > > Since the new hook
> > > > > will be placed after the switch(), the check ensures that
> > > > > ima_post_path_mknod() is invoked as originally intended when it is
> > > > > registered as implementation of path_post_mknod.
> > > > > 
> > > > > Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
> > > > > ---
> > > > >  fs/namei.c                        |  9 ++++++---
> > > > >  include/linux/ima.h               |  7 +++++--
> > > > >  security/integrity/ima/ima_main.c | 10 +++++++++-
> > > > >  3 files changed, 20 insertions(+), 6 deletions(-)
> > > > > 
> > > > > diff --git a/fs/namei.c b/fs/namei.c
> > > > > index e56ff39a79bc..c5e96f716f98 100644
> > > > > --- a/fs/namei.c
> > > > > +++ b/fs/namei.c
> > > > > @@ -4024,6 +4024,7 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
> > > > >  	struct path path;
> > > > >  	int error;
> > > > >  	unsigned int lookup_flags = 0;
> > > > > +	umode_t mode_stripped;
> > > > >  
> > > > >  	error = may_mknod(mode);
> > > > >  	if (error)
> > > > > @@ -4034,8 +4035,9 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
> > > > >  	if (IS_ERR(dentry))
> > > > >  		goto out1;
> > > > >  
> > > > > -	error = security_path_mknod(&path, dentry,
> > > > > -			mode_strip_umask(path.dentry->d_inode, mode), dev);
> > > > > +	mode_stripped = mode_strip_umask(path.dentry->d_inode, mode);
> > > > > +
> > > > > +	error = security_path_mknod(&path, dentry, mode_stripped, dev);
> > > > >  	if (error)
> > > > >  		goto out2;
> > > > >  
> > > > > @@ -4045,7 +4047,8 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
> > > > >  			error = vfs_create(idmap, path.dentry->d_inode,
> > > > >  					   dentry, mode, true);
> > > > >  			if (!error)
> > > > > -				ima_post_path_mknod(idmap, dentry);
> > > > > +				ima_post_path_mknod(idmap, &path, dentry,
> > > > > +						    mode_stripped, dev);
> > > > >  			break;
> > > > >  		case S_IFCHR: case S_IFBLK:
> > > > >  			error = vfs_mknod(idmap, path.dentry->d_inode,
> > > > > diff --git a/include/linux/ima.h b/include/linux/ima.h
> > > > > index 910a2f11a906..179ce52013b2 100644
> > > > > --- a/include/linux/ima.h
> > > > > +++ b/include/linux/ima.h
> > > > > @@ -32,7 +32,8 @@ extern int ima_read_file(struct file *file, enum kernel_read_file_id id,
> > > > >  extern int ima_post_read_file(struct file *file, void *buf, loff_t size,
> > > > >  			      enum kernel_read_file_id id);
> > > > >  extern void ima_post_path_mknod(struct mnt_idmap *idmap,
> > > > > -				struct dentry *dentry);
> > > > > +				const struct path *dir, struct dentry *dentry,
> > > > > +				umode_t mode, unsigned int dev);
> > > > >  extern int ima_file_hash(struct file *file, char *buf, size_t buf_size);
> > > > >  extern int ima_inode_hash(struct inode *inode, char *buf, size_t buf_size);
> > > > >  extern void ima_kexec_cmdline(int kernel_fd, const void *buf, int size);
> > > > > @@ -114,7 +115,9 @@ static inline int ima_post_read_file(struct file *file, void *buf, loff_t size,
> > > > >  }
> > > > >  
> > > > >  static inline void ima_post_path_mknod(struct mnt_idmap *idmap,
> > > > > -				       struct dentry *dentry)
> > > > > +				       const struct path *dir,
> > > > > +				       struct dentry *dentry,
> > > > > +				       umode_t mode, unsigned int dev)
> > > > >  {
> > > > >  	return;
> > > > >  }
> > > > > diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> > > > > index 365db0e43d7c..76eba92d7f10 100644
> > > > > --- a/security/integrity/ima/ima_main.c
> > > > > +++ b/security/integrity/ima/ima_main.c
> > > > > @@ -696,18 +696,26 @@ void ima_post_create_tmpfile(struct mnt_idmap *idmap,
> > > > >  /**
> > > > >   * ima_post_path_mknod - mark as a new inode
> > > > >   * @idmap: idmap of the mount the inode was found from
> > > > > + * @dir: path structure of parent of the new file
> > > > >   * @dentry: newly created dentry
> > > > > + * @mode: mode of the new file
> > > > > + * @dev: undecoded device number
> > > > >   *
> > > > >   * Mark files created via the mknodat syscall as new, so that the
> > > > >   * file data can be written later.
> > > > >   */
> > > > >  void ima_post_path_mknod(struct mnt_idmap *idmap,
> > > > > -			 struct dentry *dentry)
> > > > > +			 const struct path *dir, struct dentry *dentry,
> > > > > +			 umode_t mode, unsigned int dev)
> > > > >  {
> > > > >  	struct integrity_iint_cache *iint;
> > > > >  	struct inode *inode = dentry->d_inode;
> > > > >  	int must_appraise;
> > > > >  
> > > > > +	/* See do_mknodat(), IMA is executed for case 0: and case S_IFREG: */
> > > > > +	if ((mode & S_IFMT) != 0 && (mode & S_IFMT) != S_IFREG)
> > > > > +		return;
> > > > > +
> > > > 
> > > > There's already a check below to make sure that this is a regular file.
> > > > Are both needed?
> > > 
> > > You are right, I can remove the first check.
> > 
> > The question then becomes why modify hook the arguments?   
> 
> We need to make sure that ima_post_path_mknod() has the same parameters
> as the LSM hook at the time we register it to the LSM infrastructure.

I'm trying to understand why the pre hook parameters and the missing
IMA parameter are used, as opposed to just defining the new
post_path_mknod hook like IMA.

thanks,

Mimi

> 
> > > 
> > > > >  	if (!ima_policy_flag || !S_ISREG(inode->i_mode))
> > > > >  		return;
> > > > >  
> > > 
> > 
> 



  reply	other threads:[~2023-10-12 11: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 [this message]
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
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=c16551704db68c6e0ba89c729c892e9401f05dfc.camel@linux.ibm.com \
    --to=zohar@linux.ibm.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=roberto.sassu@huaweicloud.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 \
    /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).