From: Mimi Zohar <zohar@linux.vnet.ibm.com>
To: Casey Schaufler <casey@schaufler-ca.com>
Cc: Steven Whitehouse <swhiteho@redhat.com>,
linux-security-module@vger.kernl.org, cluster-devel@redhat.com,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
James Morris <jmorris@namei.org>,
David Safford <safford@watson.ibm.com>,
Andrew Morton <akpm@linux-foundation.org>,
Greg KH <greg@kroah.com>,
Dmitry Kasatkin <dmitry.kasatkin@nokia.com>,
Mimi Zohar <zohar@us.ibm.com>,
Stephen Smalley <sds@tycho.nsa.gov>,
Eric Paris <eparis@redhat.com>
Subject: Re: [PATCH v5 13/21] evm: add evm_inode_post_init call in gfs2
Date: Mon, 16 May 2011 14:48:03 -0400 [thread overview]
Message-ID: <1305571683.2669.90.camel@localhost.localdomain> (raw)
In-Reply-To: <4DD16B96.7020907@schaufler-ca.com>
On Mon, 2011-05-16 at 11:23 -0700, Casey Schaufler wrote:
> On 5/16/2011 10:57 AM, Steven Whitehouse wrote:
> > Hi,
> >
> > On Mon, 2011-05-16 at 13:50 -0400, Mimi Zohar wrote:
> >> On Mon, 2011-05-16 at 12:35 -0400, Mimi Zohar wrote:
> >>> On Mon, 2011-05-16 at 17:14 +0100, Steven Whitehouse wrote:
> >>>> 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).
> >>> Yes, for the time being the other metadata is i_ino, i_generation,
> >>> i_uid, i_gid, and i_mode. The IMA-appriasal extension would store the
> >>> file hash as an extended attribute. The digital-signature extension
> >>> would store a digitial signature instead of the hash.
> >>>
> >>>> 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?
> >>> In this case it doesn't matter, as there aren't any other xattrs at this
> >>> point. When the file closes, the file hash would be written out as
> >>> security.ima, causing security.evm to be updated to reflect the change.
> >>>
> >>>> 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.
> >>> Yes, it makes sense.
> >> Just to clarify (and am cc'ing Stephen, Eric, and Casey).
> >>
> >> Instead of:
> >>
> >> int security_inode_init_security(struct inode *inode, struct inode *dir,
> >> const struct qstr *qstr, char **name,
> >> void **value, size_t *len);
> >>
> >> You're suggesting changing the interface to something like:
> >>
> >> int security_inode_init_security(struct inode *inode, struct inode *dir,
> >> const struct qstr *qstr, struct xattr **xattrs);
> >>
> >> where 'struct xattr' is defined as (9th patch):
> >>
> >> --- a/include/linux/xattr.h
> >> +++ b/include/linux/xattr.h
> >> @@ -70,6 +70,12 @@ struct xattr_handler {
> >> size_t size, int flags, int handler_flags);
> >> };
> >>
> >> +struct xattr {
> >> + char *name;
> >> + void *value;
> >> + size_t value_len;
> >> +};
> >> +
> >> ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
> >> ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
> >> ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
> >>
> >> xattrs would be null terminated. The fs would be responsible for freeing the xattrs?
> >>
> >> thanks,
> >>
> >> Mimi
> >>
> > Yes, if that makes sense... I got the impression from the paper that
> > there is the possibility of more xattrs being added in future and this
> > way the fs end of things wouldn't have to change again when that
> > happens. I'm still trying to get my head around it all, but it seems a
> > cleaner solution to me - though I may well be missing something still,
>
> There is a very real possibility that multiple concurrent LSMs will
> be supported before too long. Smack already uses multiple attributes
> (SMACK64, SMACK64EXEC) on a file. Getting all the attributes in a
> single call could result in an interface that requires parsing a
> string argument, and we all know how popular those are. Introducing
> an interface that we know isn't going to accommodate this upcoming
> direction does not seem prudent.
I would think that Smack would benefit from Steven's suggestion of
returning an array of xattrs. Without his suggestion, I'm not sure how
you are, or planning on, initializing multiple xattrs from a single LSM,
unless of course you're not using security_inode_init_security().
Multiple LSMs calling security_inode_init_security() will be an issue
for EVM, as EVM assumes there is a single LSM xattr on which to base the
initial hmac.
thanks,
Mimi
next prev parent reply other threads:[~2011-05-16 18:48 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-16 14:44 [PATCH v5 00/21] EVM Mimi Zohar
2011-05-16 14:44 ` [PATCH v5 01/21] integrity: move ima inode integrity data management Mimi Zohar
2011-05-19 2:06 ` Serge E. Hallyn
2011-05-19 22:45 ` Mimi Zohar
2011-05-16 14:44 ` [PATCH v5 02/21] xattr: define vfs_getxattr_alloc and vfs_xattr_cmp Mimi Zohar
2011-05-19 2:11 ` Serge E. Hallyn
2011-05-16 14:44 ` [PATCH v5 03/21] evm: re-release Mimi Zohar
2011-05-19 6:05 ` Serge E. Hallyn
2011-05-19 22:49 ` Mimi Zohar
2011-05-20 11:12 ` Harald Hoyer
2011-05-20 11:21 ` Mimi Zohar
2011-05-19 21:37 ` Serge E. Hallyn
2011-05-20 12:29 ` Mimi Zohar
2011-05-20 13:43 ` Serge E. Hallyn
2011-05-16 14:44 ` [PATCH v5 04/21] evm: add support for different security.evm data types Mimi Zohar
2011-05-16 14:44 ` [PATCH v5 05/21] ima: move ima_file_free before releasing the file Mimi Zohar
2011-05-19 22:06 ` Serge E. Hallyn
2011-05-20 0:55 ` Mimi Zohar
2011-05-20 13:40 ` Serge E. Hallyn
2011-05-20 14:34 ` Mimi Zohar
2011-05-20 15:25 ` Serge E. Hallyn
2011-05-16 14:45 ` [PATCH v5 06/21] security: imbed evm calls in security hooks Mimi Zohar
2011-05-19 22:13 ` Serge E. Hallyn
2011-05-16 14:45 ` [PATCH v5 07/21] evm: evm_inode_post_removexattr Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 08/21] evm: imbed evm_inode_post_setattr Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 09/21] evm: evm_inode_post_init Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 10/21] fs: add evm_inode_post_init calls Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 11/21] evm: crypto hash replaced by shash Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 12/21] evm: add evm_inode_post_init call in btrfs Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 13/21] evm: add evm_inode_post_init call in gfs2 Mimi Zohar
2011-05-16 15:30 ` Steven Whitehouse
2011-05-16 15:50 ` Mimi Zohar
2011-05-16 16:14 ` Steven Whitehouse
2011-05-16 16:35 ` Mimi Zohar
2011-05-16 17:50 ` Mimi Zohar
2011-05-16 17:57 ` Steven Whitehouse
2011-05-16 18:20 ` Mimi Zohar
2011-05-16 18:23 ` Casey Schaufler
2011-05-16 18:48 ` Mimi Zohar [this message]
2011-05-16 19:25 ` Casey Schaufler
2011-05-19 0:55 ` Mimi Zohar
2011-05-19 9:25 ` Steven Whitehouse
2011-05-16 14:45 ` [PATCH v5 14/21] evm: add evm_inode_post_init call in jffs2 Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 15/21] evm: add evm_inode_post_init call in jfs Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 16/21] evm: add evm_inode_post_init call in xfs Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 17/21] evm: additional parameter to pass integrity cache entry 'iint' Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 18/21] evm: evm_verify_hmac must not return INTEGRITY_UNKNOWN Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 19/21] evm: replace hmac_status with evm_status Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 20/21] evm: permit only valid security.evm xattrs to be updated Mimi Zohar
2011-05-16 14:45 ` [PATCH v5 21/21] evm: add evm_inode_setattr to prevent updating an invalid security.evm Mimi Zohar
2011-05-19 0:25 ` [PATCH v5 00/21] EVM Andrew Morton
2011-05-19 1:51 ` Mimi Zohar
2011-05-20 0:51 ` James Morris
2011-05-20 1:07 ` Mimi Zohar
2011-05-20 13:06 ` David Safford
2011-05-20 14:13 ` Casey Schaufler
2011-05-26 6:08 ` Pavel Machek
2011-05-26 16:34 ` Casey Schaufler
2011-05-26 18:11 ` David Safford
2011-05-26 18:38 ` Pavel Machek
2011-05-26 19:30 ` Casey Schaufler
2011-05-26 20:02 ` Pavel Machek
2011-05-26 20:32 ` Casey Schaufler
2011-05-26 19:49 ` Mimi Zohar
2011-05-26 20:17 ` Pavel Machek
2011-05-27 17:45 ` David Safford
2011-05-29 6:58 ` Pavel Machek
2011-05-31 12:05 ` Mimi Zohar
2011-05-31 13:40 ` Valdis.Kletnieks
2011-06-01 22:11 ` Dmitry Kasatkin
2011-05-20 18:50 ` Serge E. Hallyn
2011-05-23 22:09 ` 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=1305571683.2669.90.camel@localhost.localdomain \
--to=zohar@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=casey@schaufler-ca.com \
--cc=cluster-devel@redhat.com \
--cc=dmitry.kasatkin@nokia.com \
--cc=eparis@redhat.com \
--cc=greg@kroah.com \
--cc=jmorris@namei.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernl.org \
--cc=safford@watson.ibm.com \
--cc=sds@tycho.nsa.gov \
--cc=swhiteho@redhat.com \
--cc=zohar@us.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).