* [RFC][Patch 2/6] integrity: fs hook placement
@ 2007-03-08 16:03 Mimi Zohar
2007-03-08 16:41 ` Chris Wright
2007-03-08 18:16 ` Dmitriy Monakhov
0 siblings, 2 replies; 10+ messages in thread
From: Mimi Zohar @ 2007-03-08 16:03 UTC (permalink / raw)
To: linux-kernel; +Cc: safford, serue, kjhall, zohar
This patch places calls to the new integrity hooks in the appropriate
places in the fs directory. It is not meant in any way to be viewed
as a complete set, but used as a basis for an initial discussion.
Index: linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/fs/ext3/xattr_security.c
+++ linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c
@@ -10,6 +10,7 @@
#include <linux/ext3_jbd.h>
#include <linux/ext3_fs.h>
#include <linux/security.h>
+#include <linux/integrity.h>
#include "xattr.h"
static size_t
@@ -58,12 +59,19 @@ ext3_init_security(handle_t *handle, str
err = security_inode_init_security(inode, dir, &name, &value, &len);
if (err) {
+ /* Even if creation of the security xattr fails, must
+ * indicate this is a new inode. */
+ integrity_inode_init_integrity(inode, dir, NULL, NULL, NULL);
if (err == -EOPNOTSUPP)
return 0;
return err;
}
err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY,
name, value, len, 0);
+
+ integrity_inode_init_integrity(inode, dir, &name, &value, &len);
+ err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY,
+ name, value, len, 0);
kfree(name);
kfree(value);
return err;
Index: linux-2.6.21-rc3-mm2/include/linux/fs.h
===================================================================
--- linux-2.6.21-rc3-mm2.orig/include/linux/fs.h
+++ linux-2.6.21-rc3-mm2/include/linux/fs.h
@@ -591,6 +591,9 @@ struct inode {
#ifdef CONFIG_SECURITY
void *i_security;
#endif
+#ifdef CONFIG_INTEGRITY
+ void *i_integrity;
+#endif
void *i_private; /* fs or device private pointer */
};
Index: linux-2.6.21-rc3-mm2/fs/dcache.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/fs/dcache.c
+++ linux-2.6.21-rc3-mm2/fs/dcache.c
@@ -29,6 +29,7 @@
#include <linux/file.h>
#include <asm/uaccess.h>
#include <linux/security.h>
+#include <linux/integrity.h>
#include <linux/seqlock.h>
#include <linux/swap.h>
#include <linux/bootmem.h>
@@ -986,6 +987,7 @@ void d_instantiate(struct dentry *entry,
entry->d_inode = inode;
fsnotify_d_instantiate(entry, inode);
spin_unlock(&dcache_lock);
+ integrity_d_instantiate(entry, inode);
security_d_instantiate(entry, inode);
}
@@ -1050,6 +1052,7 @@ struct dentry *d_instantiate_unique(stru
spin_unlock(&dcache_lock);
if (!result) {
+ integrity_d_instantiate(entry, inode);
security_d_instantiate(entry, inode);
return NULL;
}
@@ -1187,6 +1190,7 @@ struct dentry *d_splice_alias(struct ino
BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED));
fsnotify_d_instantiate(new, inode);
spin_unlock(&dcache_lock);
+ integrity_d_instantiate(new, inode);
security_d_instantiate(new, inode);
d_rehash(dentry);
d_move(new, dentry);
@@ -1197,6 +1201,7 @@ struct dentry *d_splice_alias(struct ino
dentry->d_inode = inode;
fsnotify_d_instantiate(dentry, inode);
spin_unlock(&dcache_lock);
+ integrity_d_instantiate(dentry, inode);
security_d_instantiate(dentry, inode);
d_rehash(dentry);
}
@@ -1748,6 +1753,7 @@ found:
spin_unlock(&dcache_lock);
out_nolock:
if (actual == dentry) {
+ integrity_d_instantiate(dentry, inode);
security_d_instantiate(dentry, inode);
return NULL;
}
Index: linux-2.6.21-rc3-mm2/fs/file_table.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/fs/file_table.c
+++ linux-2.6.21-rc3-mm2/fs/file_table.c
@@ -13,6 +13,7 @@
#include <linux/smp_lock.h>
#include <linux/fs.h>
#include <linux/security.h>
+#include <linux/integrity.h>
#include <linux/eventpoll.h>
#include <linux/rcupdate.h>
#include <linux/mount.h>
@@ -169,6 +170,7 @@ void fastcall __fput(struct file *file)
if (file->f_op && file->f_op->release)
file->f_op->release(inode, file);
security_file_free(file);
+ integrity_file_free(file);
if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL))
cdev_put(inode->i_cdev);
fops_put(file->f_op);
@@ -240,6 +242,7 @@ void put_filp(struct file *file)
{
if (atomic_dec_and_test(&file->f_count)) {
security_file_free(file);
+ integrity_file_free(file);
file_kill(file);
file_free(file);
}
Index: linux-2.6.21-rc3-mm2/fs/inode.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/fs/inode.c
+++ linux-2.6.21-rc3-mm2/fs/inode.c
@@ -17,6 +17,7 @@
#include <linux/hash.h>
#include <linux/swap.h>
#include <linux/security.h>
+#include <linux/integrity.h>
#include <linux/pagemap.h>
#include <linux/cdev.h>
#include <linux/bootmem.h>
@@ -142,6 +143,14 @@ static struct inode *alloc_inode(struct
return NULL;
}
+ if (integrity_inode_alloc(inode)) {
+ if (inode->i_sb->s_op->destroy_inode)
+ inode->i_sb->s_op->destroy_inode(inode);
+ else
+ kmem_cache_free(inode_cachep, (inode));
+ return NULL;
+ }
+
mapping->a_ops = &empty_aops;
mapping->host = inode;
mapping->flags = 0;
@@ -172,6 +181,7 @@ void destroy_inode(struct inode *inode)
{
BUG_ON(inode_has_buffers(inode));
security_inode_free(inode);
+ integrity_inode_free(inode);
if (inode->i_sb->s_op->destroy_inode)
inode->i_sb->s_op->destroy_inode(inode);
else
Index: linux-2.6.21-rc3-mm2/fs/xattr.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/fs/xattr.c
+++ linux-2.6.21-rc3-mm2/fs/xattr.c
@@ -14,6 +14,7 @@
#include <linux/xattr.h>
#include <linux/namei.h>
#include <linux/security.h>
+#include <linux/integrity.h>
#include <linux/syscalls.h>
#include <linux/module.h>
#include <linux/fsnotify.h>
@@ -84,11 +85,17 @@ vfs_setxattr(struct dentry *dentry, char
error = security_inode_setxattr(dentry, name, value, size, flags);
if (error)
goto out;
+
+ error = integrity_inode_setxattr(dentry, name, value, size, flags);
+ if (error)
+ goto out;
+
error = -EOPNOTSUPP;
if (inode->i_op->setxattr) {
error = inode->i_op->setxattr(dentry, name, value, size, flags);
if (!error) {
fsnotify_xattr(dentry);
+ integrity_inode_post_setxattr(dentry, name);
security_inode_post_setxattr(dentry, name, value,
size, flags);
}
@@ -181,6 +188,8 @@ vfs_removexattr(struct dentry *dentry, c
mutex_lock(&inode->i_mutex);
error = inode->i_op->removexattr(dentry, name);
+ if (!error)
+ integrity_inode_post_setxattr(dentry, name);
mutex_unlock(&inode->i_mutex);
if (!error)
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 16:03 [RFC][Patch 2/6] integrity: fs hook placement Mimi Zohar @ 2007-03-08 16:41 ` Chris Wright 2007-03-08 17:07 ` Serge E. Hallyn 2007-03-08 18:16 ` Dmitriy Monakhov 1 sibling, 1 reply; 10+ messages in thread From: Chris Wright @ 2007-03-08 16:41 UTC (permalink / raw) To: Mimi Zohar; +Cc: linux-kernel, safford, serue, kjhall, zohar * Mimi Zohar (zohar@linux.vnet.ibm.com) wrote: > + integrity_d_instantiate(entry, inode); > security_d_instantiate(entry, inode); > + integrity_d_instantiate(entry, inode); > security_d_instantiate(entry, inode); > spin_unlock(&dcache_lock); > + integrity_d_instantiate(new, inode); > security_d_instantiate(new, inode); > d_rehash(dentry); > d_move(new, dentry); > + integrity_d_instantiate(dentry, inode); > security_d_instantiate(dentry, inode); > d_rehash(dentry); > if (actual == dentry) { > + integrity_d_instantiate(dentry, inode); > security_d_instantiate(dentry, inode); > file->f_op->release(inode, file); > security_file_free(file); > + integrity_file_free(file); > security_file_free(file); > + integrity_file_free(file); > if (security_inode_alloc(inode)) { ... > + if (integrity_inode_alloc(inode)) { > + if (inode->i_sb->s_op->destroy_inode) > + inode->i_sb->s_op->destroy_inode(inode); > security_inode_free(inode); > + integrity_inode_free(inode); > error = security_inode_setxattr(dentry, name, value, size, flags); > if (error) > goto out; > + > + error = integrity_inode_setxattr(dentry, name, value, size, flags); > fsnotify_xattr(dentry); > + integrity_inode_post_setxattr(dentry, name); > security_inode_post_setxattr(dentry, name, value, I know there's some slightly different goals, but this just doesn't make sense. Need to get back to defining and expressing just the differences. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 16:41 ` Chris Wright @ 2007-03-08 17:07 ` Serge E. Hallyn 2007-03-08 17:40 ` Chris Wright 0 siblings, 1 reply; 10+ messages in thread From: Serge E. Hallyn @ 2007-03-08 17:07 UTC (permalink / raw) To: Chris Wright; +Cc: Mimi Zohar, linux-kernel, safford, serue, kjhall, zohar Quoting Chris Wright (chrisw@sous-sol.org): > * Mimi Zohar (zohar@linux.vnet.ibm.com) wrote: > > + integrity_d_instantiate(entry, inode); > > security_d_instantiate(entry, inode); > > > + integrity_d_instantiate(entry, inode); > > security_d_instantiate(entry, inode); > > > spin_unlock(&dcache_lock); > > + integrity_d_instantiate(new, inode); > > security_d_instantiate(new, inode); > > d_rehash(dentry); > > > d_move(new, dentry); > > + integrity_d_instantiate(dentry, inode); > > security_d_instantiate(dentry, inode); > > d_rehash(dentry); > > > if (actual == dentry) { > > + integrity_d_instantiate(dentry, inode); > > security_d_instantiate(dentry, inode); > > > > file->f_op->release(inode, file); > > security_file_free(file); > > + integrity_file_free(file); > > > > security_file_free(file); > > + integrity_file_free(file); > > > > if (security_inode_alloc(inode)) { > ... > > + if (integrity_inode_alloc(inode)) { > > + if (inode->i_sb->s_op->destroy_inode) > > + inode->i_sb->s_op->destroy_inode(inode); > > > security_inode_free(inode); > > + integrity_inode_free(inode); > > > error = security_inode_setxattr(dentry, name, value, size, flags); > > if (error) > > goto out; > > + > > + error = integrity_inode_setxattr(dentry, name, value, size, flags); > > > fsnotify_xattr(dentry); > > + integrity_inode_post_setxattr(dentry, name); > > security_inode_post_setxattr(dentry, name, value, > > I know there's some slightly different goals, but this just doesn't make > sense. Need to get back to defining and expressing just the differences. Are you objecting only to the duplication at the callsites, so that an fsnotify-type of consolidation of security and integrity hooks would be ok? Or are you complaining that the security_inode_setxattr and integrity_inode_setxattr hooks are too similar anyway, and integrity modules should just use some lsm hooks for anything which will be authoritative? (I could see an argument that integirty subsystem should be purely for measuring and hence its hooks should never return a value. Only hitch there is that if integrity subsystem hits ENOMEM it should be able to refuse the action...) -serge ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 17:07 ` Serge E. Hallyn @ 2007-03-08 17:40 ` Chris Wright 2007-03-08 18:01 ` Serge E. Hallyn 2007-03-08 18:34 ` Mimi Zohar 0 siblings, 2 replies; 10+ messages in thread From: Chris Wright @ 2007-03-08 17:40 UTC (permalink / raw) To: Serge E. Hallyn Cc: Chris Wright, Mimi Zohar, linux-kernel, safford, serue, kjhall, zohar * Serge E. Hallyn (serue@us.ibm.com) wrote: > Are you objecting only to the duplication at the callsites, so that an > fsnotify-type of consolidation of security and integrity hooks would be > ok? Or are you complaining that the security_inode_setxattr and > integrity_inode_setxattr hooks are too similar anyway, and integrity > modules should just use some lsm hooks for anything which will be > authoritative? It's duplication of callsites with many identical implementations that's the problem. > (I could see an argument that integirty subsystem should be purely for > measuring and hence its hooks should never return a value. Only hitch > there is that if integrity subsystem hits ENOMEM it should be able to > refuse the action...) Right, that's what I was expecting to see, just the measurement infrastructure. thanks, -chris ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 17:40 ` Chris Wright @ 2007-03-08 18:01 ` Serge E. Hallyn 2007-03-08 19:22 ` Stephen Smalley 2007-03-08 18:34 ` Mimi Zohar 1 sibling, 1 reply; 10+ messages in thread From: Serge E. Hallyn @ 2007-03-08 18:01 UTC (permalink / raw) To: Chris Wright Cc: Serge E. Hallyn, Mimi Zohar, linux-kernel, safford, serue, kjhall, zohar Quoting Chris Wright (chrisw@sous-sol.org): > * Serge E. Hallyn (serue@us.ibm.com) wrote: > > Are you objecting only to the duplication at the callsites, so that an > > fsnotify-type of consolidation of security and integrity hooks would be > > ok? Or are you complaining that the security_inode_setxattr and > > integrity_inode_setxattr hooks are too similar anyway, and integrity > > modules should just use some lsm hooks for anything which will be > > authoritative? > > It's duplication of callsites with many identical implementations > that's the problem. Yes it's ugly... But I guess it gets a point across :) > > (I could see an argument that integirty subsystem should be purely for > > measuring and hence its hooks should never return a value. Only hitch > > there is that if integrity subsystem hits ENOMEM it should be able to > > refuse the action...) > > Right, that's what I was expecting to see, just the measurement > infrastructure. So what you are saying is EVM would stay an LSM, with a cooperating integrity subsystem *just* doing measurements? That's kind of what i was expecting too, however that doesn't fit as well with the idea that an integrity subsystem prevents the need for lsm stacking. I think the idea was that evm would still be able to enforce integrity of selinux xattrs without it stack with selinux. So I can see where this approach came from. -serge ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 18:01 ` Serge E. Hallyn @ 2007-03-08 19:22 ` Stephen Smalley 2007-03-08 21:07 ` Serge E. Hallyn 0 siblings, 1 reply; 10+ messages in thread From: Stephen Smalley @ 2007-03-08 19:22 UTC (permalink / raw) To: Serge E. Hallyn Cc: Chris Wright, Mimi Zohar, linux-kernel, safford, serue, kjhall, zohar On Thu, 2007-03-08 at 12:01 -0600, Serge E. Hallyn wrote: > Quoting Chris Wright (chrisw@sous-sol.org): > > * Serge E. Hallyn (serue@us.ibm.com) wrote: > > > Are you objecting only to the duplication at the callsites, so that an > > > fsnotify-type of consolidation of security and integrity hooks would be > > > ok? Or are you complaining that the security_inode_setxattr and > > > integrity_inode_setxattr hooks are too similar anyway, and integrity > > > modules should just use some lsm hooks for anything which will be > > > authoritative? > > > > It's duplication of callsites with many identical implementations > > that's the problem. > > Yes it's ugly... > > But I guess it gets a point across :) > > > > (I could see an argument that integirty subsystem should be purely for > > > measuring and hence its hooks should never return a value. Only hitch > > > there is that if integrity subsystem hits ENOMEM it should be able to > > > refuse the action...) > > > > Right, that's what I was expecting to see, just the measurement > > infrastructure. > > So what you are saying is EVM would stay an LSM, with a cooperating > integrity subsystem *just* doing measurements? > > That's kind of what i was expecting too, however that doesn't fit as > well with the idea that an integrity subsystem prevents the need for lsm > stacking. I think the idea was that evm would still be able to enforce > integrity of selinux xattrs without it stack with selinux. So I can see > where this approach came from. The enforcement mechanism should be directly integrated into SELinux, not stacked as a separate module. -- Stephen Smalley National Security Agency ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 19:22 ` Stephen Smalley @ 2007-03-08 21:07 ` Serge E. Hallyn 0 siblings, 0 replies; 10+ messages in thread From: Serge E. Hallyn @ 2007-03-08 21:07 UTC (permalink / raw) To: Stephen Smalley Cc: Serge E. Hallyn, Chris Wright, Mimi Zohar, linux-kernel, safford, serue, kjhall, zohar Quoting Stephen Smalley (sds@tycho.nsa.gov): > On Thu, 2007-03-08 at 12:01 -0600, Serge E. Hallyn wrote: > > Quoting Chris Wright (chrisw@sous-sol.org): > > > * Serge E. Hallyn (serue@us.ibm.com) wrote: > > > > Are you objecting only to the duplication at the callsites, so that an > > > > fsnotify-type of consolidation of security and integrity hooks would be > > > > ok? Or are you complaining that the security_inode_setxattr and > > > > integrity_inode_setxattr hooks are too similar anyway, and integrity > > > > modules should just use some lsm hooks for anything which will be > > > > authoritative? > > > > > > It's duplication of callsites with many identical implementations > > > that's the problem. > > > > Yes it's ugly... > > > > But I guess it gets a point across :) > > > > > > (I could see an argument that integirty subsystem should be purely for > > > > measuring and hence its hooks should never return a value. Only hitch > > > > there is that if integrity subsystem hits ENOMEM it should be able to > > > > refuse the action...) > > > > > > Right, that's what I was expecting to see, just the measurement > > > infrastructure. > > > > So what you are saying is EVM would stay an LSM, with a cooperating > > integrity subsystem *just* doing measurements? > > > > That's kind of what i was expecting too, however that doesn't fit as > > well with the idea that an integrity subsystem prevents the need for lsm > > stacking. I think the idea was that evm would still be able to enforce > > integrity of selinux xattrs without it stack with selinux. So I can see > > where this approach came from. > > The enforcement mechanism should be directly integrated into SELinux, > not stacked as a separate module. And a big plus of splitting it up as I was describing is that anyone who wanted could make use of the measurement module to add such functionality to SELinux, as an alternative to the EVM LSM module. -serge ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 17:40 ` Chris Wright 2007-03-08 18:01 ` Serge E. Hallyn @ 2007-03-08 18:34 ` Mimi Zohar 1 sibling, 0 replies; 10+ messages in thread From: Mimi Zohar @ 2007-03-08 18:34 UTC (permalink / raw) To: Chris Wright; +Cc: Serge E. Hallyn, linux-kernel, safford, serue, kjhall, zohar On Thu, 2007-03-08 at 09:40 -0800, Chris Wright wrote: > * Serge E. Hallyn (serue@us.ibm.com) wrote: > > Are you objecting only to the duplication at the callsites, so that an > > fsnotify-type of consolidation of security and integrity hooks would be > > ok? Or are you complaining that the security_inode_setxattr and > > integrity_inode_setxattr hooks are too similar anyway, and integrity > > modules should just use some lsm hooks for anything which will be > > authoritative? > > It's duplication of callsites with many identical implementations > that's the problem. > > > (I could see an argument that integirty subsystem should be purely for > > measuring and hence its hooks should never return a value. Only hitch > > there is that if integrity subsystem hits ENOMEM it should be able to > > refuse the action...) > > Right, that's what I was expecting to see, just the measurement > infrastructure. There are a total of 10 Linux Integrity Module(LIM) hooks. Seven of which parallel the LSM hooks, out of the ~150 LSM hooks. 3 of the LIM hooks are for initializing, allocating, and freeing the inode- >i_integrity, used for caching integrity information. As the integrity information is stored as extended attributes, 2 hooks are for catching changes to the extended attributes, one is for updating the extended attributes when the file closes, and d_instantiate is used for initialization. Is this excessive? How else would you design integrity, without using the LSM hooks? Mimi Zohar ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 16:03 [RFC][Patch 2/6] integrity: fs hook placement Mimi Zohar 2007-03-08 16:41 ` Chris Wright @ 2007-03-08 18:16 ` Dmitriy Monakhov 2007-03-08 18:45 ` Mimi Zohar 1 sibling, 1 reply; 10+ messages in thread From: Dmitriy Monakhov @ 2007-03-08 18:16 UTC (permalink / raw) To: Mimi Zohar; +Cc: linux-kernel, safford, serue, kjhall, zohar Mimi Zohar <zohar@linux.vnet.ibm.com> writes: > This patch places calls to the new integrity hooks in the appropriate > places in the fs directory. It is not meant in any way to be viewed > as a complete set, but used as a basis for an initial discussion. > > Index: linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/fs/ext3/xattr_security.c > +++ linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c > @@ -10,6 +10,7 @@ > #include <linux/ext3_jbd.h> > #include <linux/ext3_fs.h> > #include <linux/security.h> > +#include <linux/integrity.h> > #include "xattr.h" > > static size_t > @@ -58,12 +59,19 @@ ext3_init_security(handle_t *handle, str > > err = security_inode_init_security(inode, dir, &name, &value, &len); > if (err) { > + /* Even if creation of the security xattr fails, must > + * indicate this is a new inode. */ > + integrity_inode_init_integrity(inode, dir, NULL, NULL, NULL); > if (err == -EOPNOTSUPP) > return 0; > return err; > } <<<< block begin > err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, > name, value, len, 0); > + > + integrity_inode_init_integrity(inode, dir, &name, &value, &len); > + err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, > + name, value, len, 0); <<<< block end May be i've missed something, but i don't get last block. Why you call ext3_xattr_set_handle() twise?, or you just mistyped and it has to look like this: <<<<block_begin + integrity_inode_init_integrity(inode, dir, &name, &value, &len); err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, name, value, len, 0); <<<block_end > kfree(name); > kfree(value); > return err; > Index: linux-2.6.21-rc3-mm2/include/linux/fs.h > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/include/linux/fs.h > +++ linux-2.6.21-rc3-mm2/include/linux/fs.h > @@ -591,6 +591,9 @@ struct inode { > #ifdef CONFIG_SECURITY > void *i_security; > #endif > +#ifdef CONFIG_INTEGRITY > + void *i_integrity; > +#endif > void *i_private; /* fs or device private pointer */ > }; > > Index: linux-2.6.21-rc3-mm2/fs/dcache.c > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/fs/dcache.c > +++ linux-2.6.21-rc3-mm2/fs/dcache.c > @@ -29,6 +29,7 @@ > #include <linux/file.h> > #include <asm/uaccess.h> > #include <linux/security.h> > +#include <linux/integrity.h> > #include <linux/seqlock.h> > #include <linux/swap.h> > #include <linux/bootmem.h> > @@ -986,6 +987,7 @@ void d_instantiate(struct dentry *entry, > entry->d_inode = inode; > fsnotify_d_instantiate(entry, inode); > spin_unlock(&dcache_lock); > + integrity_d_instantiate(entry, inode); > security_d_instantiate(entry, inode); > } > > @@ -1050,6 +1052,7 @@ struct dentry *d_instantiate_unique(stru > spin_unlock(&dcache_lock); > > if (!result) { > + integrity_d_instantiate(entry, inode); > security_d_instantiate(entry, inode); > return NULL; > } > @@ -1187,6 +1190,7 @@ struct dentry *d_splice_alias(struct ino > BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED)); > fsnotify_d_instantiate(new, inode); > spin_unlock(&dcache_lock); > + integrity_d_instantiate(new, inode); > security_d_instantiate(new, inode); > d_rehash(dentry); > d_move(new, dentry); > @@ -1197,6 +1201,7 @@ struct dentry *d_splice_alias(struct ino > dentry->d_inode = inode; > fsnotify_d_instantiate(dentry, inode); > spin_unlock(&dcache_lock); > + integrity_d_instantiate(dentry, inode); > security_d_instantiate(dentry, inode); > d_rehash(dentry); > } > @@ -1748,6 +1753,7 @@ found: > spin_unlock(&dcache_lock); > out_nolock: > if (actual == dentry) { > + integrity_d_instantiate(dentry, inode); > security_d_instantiate(dentry, inode); > return NULL; > } > Index: linux-2.6.21-rc3-mm2/fs/file_table.c > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/fs/file_table.c > +++ linux-2.6.21-rc3-mm2/fs/file_table.c > @@ -13,6 +13,7 @@ > #include <linux/smp_lock.h> > #include <linux/fs.h> > #include <linux/security.h> > +#include <linux/integrity.h> > #include <linux/eventpoll.h> > #include <linux/rcupdate.h> > #include <linux/mount.h> > @@ -169,6 +170,7 @@ void fastcall __fput(struct file *file) > if (file->f_op && file->f_op->release) > file->f_op->release(inode, file); > security_file_free(file); > + integrity_file_free(file); > if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL)) > cdev_put(inode->i_cdev); > fops_put(file->f_op); > @@ -240,6 +242,7 @@ void put_filp(struct file *file) > { > if (atomic_dec_and_test(&file->f_count)) { > security_file_free(file); > + integrity_file_free(file); > file_kill(file); > file_free(file); > } > Index: linux-2.6.21-rc3-mm2/fs/inode.c > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/fs/inode.c > +++ linux-2.6.21-rc3-mm2/fs/inode.c > @@ -17,6 +17,7 @@ > #include <linux/hash.h> > #include <linux/swap.h> > #include <linux/security.h> > +#include <linux/integrity.h> > #include <linux/pagemap.h> > #include <linux/cdev.h> > #include <linux/bootmem.h> > @@ -142,6 +143,14 @@ static struct inode *alloc_inode(struct > return NULL; > } > > + if (integrity_inode_alloc(inode)) { > + if (inode->i_sb->s_op->destroy_inode) > + inode->i_sb->s_op->destroy_inode(inode); > + else > + kmem_cache_free(inode_cachep, (inode)); > + return NULL; > + } > + > mapping->a_ops = &empty_aops; > mapping->host = inode; > mapping->flags = 0; > @@ -172,6 +181,7 @@ void destroy_inode(struct inode *inode) > { > BUG_ON(inode_has_buffers(inode)); > security_inode_free(inode); > + integrity_inode_free(inode); > if (inode->i_sb->s_op->destroy_inode) > inode->i_sb->s_op->destroy_inode(inode); > else > Index: linux-2.6.21-rc3-mm2/fs/xattr.c > =================================================================== > --- linux-2.6.21-rc3-mm2.orig/fs/xattr.c > +++ linux-2.6.21-rc3-mm2/fs/xattr.c > @@ -14,6 +14,7 @@ > #include <linux/xattr.h> > #include <linux/namei.h> > #include <linux/security.h> > +#include <linux/integrity.h> > #include <linux/syscalls.h> > #include <linux/module.h> > #include <linux/fsnotify.h> > @@ -84,11 +85,17 @@ vfs_setxattr(struct dentry *dentry, char > error = security_inode_setxattr(dentry, name, value, size, flags); > if (error) > goto out; > + > + error = integrity_inode_setxattr(dentry, name, value, size, flags); > + if (error) > + goto out; > + > error = -EOPNOTSUPP; > if (inode->i_op->setxattr) { > error = inode->i_op->setxattr(dentry, name, value, size, flags); > if (!error) { > fsnotify_xattr(dentry); > + integrity_inode_post_setxattr(dentry, name); > security_inode_post_setxattr(dentry, name, value, > size, flags); > } > @@ -181,6 +188,8 @@ vfs_removexattr(struct dentry *dentry, c > > mutex_lock(&inode->i_mutex); > error = inode->i_op->removexattr(dentry, name); > + if (!error) > + integrity_inode_post_setxattr(dentry, name); > mutex_unlock(&inode->i_mutex); > > if (!error) > > > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC][Patch 2/6] integrity: fs hook placement 2007-03-08 18:16 ` Dmitriy Monakhov @ 2007-03-08 18:45 ` Mimi Zohar 0 siblings, 0 replies; 10+ messages in thread From: Mimi Zohar @ 2007-03-08 18:45 UTC (permalink / raw) To: Dmitriy Monakhov; +Cc: linux-kernel, safford, serue, kjhall, zohar On Thu, 2007-03-08 at 21:16 +0300, Dmitriy Monakhov wrote: > Mimi Zohar <zohar@linux.vnet.ibm.com> writes: > > > This patch places calls to the new integrity hooks in the appropriate > > places in the fs directory. It is not meant in any way to be viewed > > as a complete set, but used as a basis for an initial discussion. > > > > Index: linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c > > =================================================================== > > --- linux-2.6.21-rc3-mm2.orig/fs/ext3/xattr_security.c > > +++ linux-2.6.21-rc3-mm2/fs/ext3/xattr_security.c > > @@ -10,6 +10,7 @@ > > #include <linux/ext3_jbd.h> > > #include <linux/ext3_fs.h> > > #include <linux/security.h> > > +#include <linux/integrity.h> > > #include "xattr.h" > > > > static size_t > > @@ -58,12 +59,19 @@ ext3_init_security(handle_t *handle, str > > > > err = security_inode_init_security(inode, dir, &name, &value, &len); > > if (err) { > > + /* Even if creation of the security xattr fails, must > > + * indicate this is a new inode. */ > > + integrity_inode_init_integrity(inode, dir, NULL, NULL, NULL); > > if (err == -EOPNOTSUPP) > > return 0; > > return err; > > } > <<<< block begin > > err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, > > name, value, len, 0); > > + > > + integrity_inode_init_integrity(inode, dir, &name, &value, &len); > > + err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, > > + name, value, len, 0); > <<<< block end > May be i've missed something, but i don't get last block. > Why you call ext3_xattr_set_handle() twise?, > or you just mistyped and it has to look like this: > <<<<block_begin Both security_inode_init_security and integrity_inode_init_integrity create extended attributes. The first ext3_xattr_set_handle creates the security extended attribute and the second one creates the integrity extended attribute. In the case of EVM, EVM calculates an HMAC on a set of extended attributes, possibly including the initial security extended attribute. Mimi Zohar ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2007-03-08 21:07 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-03-08 16:03 [RFC][Patch 2/6] integrity: fs hook placement Mimi Zohar 2007-03-08 16:41 ` Chris Wright 2007-03-08 17:07 ` Serge E. Hallyn 2007-03-08 17:40 ` Chris Wright 2007-03-08 18:01 ` Serge E. Hallyn 2007-03-08 19:22 ` Stephen Smalley 2007-03-08 21:07 ` Serge E. Hallyn 2007-03-08 18:34 ` Mimi Zohar 2007-03-08 18:16 ` Dmitriy Monakhov 2007-03-08 18:45 ` Mimi Zohar
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.