cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH v5 13/21] evm: add evm_inode_post_init call in gfs2
Date: Mon, 16 May 2011 17:14:29 +0100	[thread overview]
Message-ID: <1305562469.2855.26.camel@menhir> (raw)
In-Reply-To: <1305561051.2669.10.camel@localhost.localdomain>

Hi,

On Mon, 2011-05-16 at 11:50 -0400, Mimi Zohar wrote:
> On Mon, 2011-05-16 at 16:30 +0100, Steven Whitehouse wrote:
> > Hi,
> > 
> > On Mon, 2011-05-16 at 10:45 -0400, Mimi Zohar wrote:
> > > After creating the initial LSM security extended attribute, call
> > > evm_inode_post_init_security() to create the 'security.evm'
> > > extended attribute.
> > > 
> > > Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
> > > ---
> > >  fs/gfs2/inode.c |   28 +++++++++++++++++++---------
> > >  1 files changed, 19 insertions(+), 9 deletions(-)
> > > 
> > [snip]
> > > +	struct xattr lsm_xattr;
> > > +	struct xattr evm_xattr;
> > >  
> > >  	err = security_inode_init_security(&ip->i_inode, &dip->i_inode, qstr,
> > > -					   &name, &value, &len);
> > > +					   &lsm_xattr.name, &lsm_xattr.value,
> > > +					   &lsm_xattr.value_len);
> > >  
> > >  	if (err) {
> > >  		if (err == -EOPNOTSUPP)
> > > @@ -780,11 +781,20 @@ static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip,
> > >  		return err;
> > >  	}
> > >  
> > > -	err = __gfs2_xattr_set(&ip->i_inode, name, value, len, 0,
> > > -			       GFS2_EATYPE_SECURITY);
> > > -	kfree(value);
> > > -	kfree(name);
> > > -
> > > +	err = __gfs2_xattr_set(&ip->i_inode, lsm_xattr.name, lsm_xattr.value,
> > > +			       lsm_xattr.value_len, 0, GFS2_EATYPE_SECURITY);
> > > +	if (err < 0)
> > > +		goto out;
> > > +	err = evm_inode_post_init_security(&ip->i_inode, &lsm_xattr,
> > > +					   &evm_xattr);
> > > +	if (err)
> > > +		goto out;
> > > +	err = __gfs2_xattr_set(&ip->i_inode, evm_xattr.name, evm_xattr.value,
> > > +			       evm_xattr.value_len, 0, GFS2_EATYPE_SECURITY);
> > > +	kfree(evm_xattr.value);
> > > +out:
> > > +	kfree(lsm_xattr.name);
> > > +	kfree(lsm_xattr.value);
> > >  	return err;
> > >  }
> > >  
> > 
> > Just wondering whether we could have a single call to the security
> > subsystem which returns a vector of xattrs rather than having to call
> > two different functions?
> > 
> > Steve.
> 
> There are a number of places that the LSM function is called immediately
> followed by either EVM/IMA.  In each of those places it is hidden from
> the caller by calling the security_inode_XXX_security().  In this case
> each fs has it's own method of creating an extended attribute.  If that
> method could be passed to security_inode_init_security, then
> security_inode_init_security() could call both the LSM and EVM functions
> directly.
> 
> Mimi
> 

I'm still not quite sure I understand... from a (very brief) look at the
paper, it seems that what you are trying to do is add a new xattr to
inodes which has some hash of some of the inode metadata (presumably
including the selinux xattr and some other fields).

I'm not sure why it matters whether the selinux data has been written to
the buffers before the xattr containing the hash? The data will not
change (I hope!) and if it does presumably the hash will pick that up
when it is checked at a later date?

The reason I'm asking is that currently the creation of GFS2 inodes is
broken down into a number of transactions, carefully designed to ensure
that the correct clean up occurs if there is an error. I would like to
try and reduce the number of transactions during the create process
where possible. That means I would like to move to a model which looks
like this:

1. Calculate number of blocks required, based on inode + xattrs (if any)
2. Allocate blocks
3. Populate with data (i.e. set xattrs)

I'm trying to work out whether there is some reason why we have to use
your proposed:

1. Get selinux xattr
2. Set selinux xattr
3. Get EVM xattr
4. Set EVM xattr

as opposed to getting all the xattrs in a single call and then being
able to set them all in a single operation, if that makes sense?

Steve.




  parent reply	other threads:[~2011-05-16 16:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1305557115-15652-1-git-send-email-zohar@linux.vnet.ibm.com>
     [not found] ` <1305557115-15652-14-git-send-email-zohar@linux.vnet.ibm.com>
2011-05-16 15:30   ` [Cluster-devel] [PATCH v5 13/21] evm: add evm_inode_post_init call in gfs2 Steven Whitehouse
     [not found]     ` <1305561051.2669.10.camel@localhost.localdomain>
2011-05-16 16:14       ` Steven Whitehouse [this message]
     [not found]         ` <1305563758.2669.26.camel@localhost.localdomain>
     [not found]           ` <1305568250.2669.47.camel@localhost.localdomain>
2011-05-16 17:57             ` Steven Whitehouse
     [not found]               ` <4DD16B96.7020907@schaufler-ca.com>
     [not found]                 ` <1305571683.2669.90.camel@localhost.localdomain>
     [not found]                   ` <4DD17A15.2060102@schaufler-ca.com>
     [not found]                     ` <1305766540.3304.44.camel@localhost.localdomain>
2011-05-19  9:25                       ` Steven Whitehouse

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=1305562469.2855.26.camel@menhir \
    --to=swhiteho@redhat.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).