integrity: new hooks
PATCH 1/7 integrity: new hooks
This patch adds integrity hooks used to implement an integrity service provider and updates the previously submitted dummy provider to support these new hooks.
Signed-off-by Mimi Zohar <[email protected]>
Signed-off-by Kylene Hall <[email protected]>
---
security/integrity_dummy.c +85 -13
@@ -3,7 +3,7 @@* * Instantiate integrity subsystem * -* Copyright (C) 2005,2006 IBM Corporation +* Copyright (C) 2005,2006,2007 IBM Corporation * Author: Mimi Zohar <[email protected]> * * This program is free software; you can redistribute it and/or modify
@@ -28,21 +28,24 @@ static int dummy_verify_metadata(structint size;int error; -if (!xattr_value || !xattr_value_len || !status) +if (!status)return -EINVAL ; - size =vfs_getxattr (dentry, xattr_name,NULL ,0 ); -if (size <0 ) { -if (size == -ENODATA ) - *status =INTEGRITY_NOLABEL ; -return size; +/* get requested extended attribute */ +if (xattr_name && xattr_value && xattr_value_len) { + size =vfs_getxattr (dentry, xattr_name,NULL ,0 ); +if (size <0 ) { +if (size == -ENODATA ) + *status =INTEGRITY_NOLABEL ; +return size; + } + + value =kzalloc (size +1 ,GFP_KERNEL ); +if (!value) +return -ENOMEM ; + error =vfs_getxattr (dentry, xattr_name, value, size); } - value =kzalloc (size +1 ,GFP_KERNEL ); -if (!value) -return -ENOMEM ; - error =vfs_getxattr (dentry, xattr_name, value, size); - *xattr_value_len = size; *xattr_value = value; *status =INTEGRITY_PASS ;
@@ -62,9 +65,78 @@ static void dummy_measure(struct dentryreturn ; } +static int dummy_inode_alloc_integrity (struct inode *inode) +{ +return 0 ; +} + +static void dummy_inode_free_integrity (struct inode *inode) +{ +return ; +} + +static void dummy_inode_init_integrity (struct inode *inode,struct inode *dir, +char **name,void **value,size_t * len) +{ +return ; +} + +static void dummy_file_free_integrity (struct file *file) +{ +return ; +} + +static int dummy_inode_setxattr (struct dentry *dentry,char *name,void *value, +size_t size,int flags) +{ +if (!strncmp (name,XATTR_SECURITY_PREFIX , +sizeof (XATTR_SECURITY_PREFIX ) -1 ) && + !capable (CAP_SYS_ADMIN )) +return -EPERM ; +return 0 ; +} + +static void dummy_inode_post_setxattr (struct dentry *dentry,char *name) +{ +} + +static void dummy_d_instantiate (struct dentry *dentry,struct inode *inode) +{ +return ; +} +struct integrity_operations dummy_integrity_ops = { .verify_metadata = dummy_verify_metadata, .verify_data = dummy_verify_data, - .measure = dummy_measure + .measure = dummy_measure, + .inode_setxattr = dummy_inode_setxattr, + .inode_post_setxattr = dummy_inode_post_setxattr, + .inode_alloc_integrity = dummy_inode_alloc_integrity, + .inode_init_integrity = dummy_inode_init_integrity, + .inode_free_integrity = dummy_inode_free_integrity, + .file_free_integrity = dummy_file_free_integrity, + .d_instantiate = dummy_d_instantiate }; +#define set_to_dummy_if_null (ops, function) \ + do { \ + if (!ops->function) { \ + ops->function = dummy_##function; \ + printk(KERN_INFO "Had to override the " #function \ + " security operation with the dummy one.\n");\ + } \ + } while (0) + +void integrity_fixup_ops (struct integrity_operations *ops) +{ +set_to_dummy_if_null (ops, verify_metadata); +set_to_dummy_if_null (ops, verify_data); +set_to_dummy_if_null (ops, measure); +set_to_dummy_if_null (ops, inode_setxattr); +set_to_dummy_if_null (ops, inode_post_setxattr); +set_to_dummy_if_null (ops, inode_alloc_integrity); +set_to_dummy_if_null (ops, inode_init_integrity); +set_to_dummy_if_null (ops, inode_free_integrity); +set_to_dummy_if_null (ops, file_free_integrity); +set_to_dummy_if_null (ops, d_instantiate); +}
security/integrity_dummy.h +2 -1
@@ -1,7 +1,7 @@/* * integrity_dummy.h * -* Copyright (C) 2005,2006 IBM Corporation +* Copyright (C) 2005,2006,2007 IBM Corporation * Author: Mimi Zohar <[email protected]> * * This program is free software; you can redistribute it and/or modify
@@ -10,3 +10,4 @@*/ extern struct integrity_operations dummy_integrity_ops; +extern void integrity_fixup_ops (struct integrity_operations *ops);
include/linux/integrity.h +143 -6
196 lines not on this page · raw message
security/integrity.c +2 -1
@@ -3,7 +3,7 @@* * register integrity subsystem * -* Copyright (C) 2005,2006 IBM Corporation +* Copyright (C) 2005,2006,2007 IBM Corporation * Author: Mimi Zohar <[email protected]> * * This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@ int register_integrity(struct integrity_return -EAGAIN ; integrity_ops = ops; +integrity_fixup_ops (integrity_ops);return 0 ; }