Mimi Zohar <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to