On Fri, 2005-07-08 at 09:55 -0400, Stephen Smalley wrote:
> This patch modifies ext2 to call the inode_init_security LSM hook to
> obtain the security attribute for a newly created inode and to set the
> resulting attribute on the new inode. This parallels the existing
> processing for setting ACLs on newly created inodes.
>
> Please let me know if you have any comments or suggestions for improvement.
>
> fs/ext2/ialloc.c | 5 +++++
> fs/ext2/xattr.h | 1 +
> fs/ext2/xattr_security.c | 22 ++++++++++++++++++++++
> 3 files changed, 28 insertions(+)
>
> diff -X /home/sds/dontdiff -rup linux-2.6.13.clean/fs/ext2/ialloc.c
> linux-2.6.13/fs/ext2/ialloc.c
> --- linux-2.6.13.clean/fs/ext2/ialloc.c 2005-06-17 15:48:29.000000000
> -0400
> +++ linux-2.6.13/fs/ext2/ialloc.c 2005-07-06 10:55:37.000000000 -0400
> @@ -614,6 +614,11 @@ got:
> DQUOT_FREE_INODE(inode);
> goto fail2;
> }
> + err = ext2_init_security(inode,dir);
Won't this be unresolved if CONFIG_EXT2_FS_SECURITY is unset?
xattr_security.c won't be compiled at all. The ext3 patch has the same
problem.
BTW, I'm working on a patch for jfs. It's a little more complicated
since jfs's xattr code creates a transaction down in the lower level
code. I'm going to have to restructure it so the caller creates the
transaction and passes down the tid.
> + if (err) {
> + DQUOT_FREE_INODE(inode);
> + goto fail2;
> + }
> mark_inode_dirty(inode);
> ext2_debug("allocating inode %lu\n", inode->i_ino);
> ext2_preread_inode(inode);
> diff -X /home/sds/dontdiff -rup linux-2.6.13.clean/fs/ext2/xattr.h
> linux-2.6.13/fs/ext2/xattr.h
> --- linux-2.6.13.clean/fs/ext2/xattr.h 2005-06-17 15:48:29.000000000
> -0400
> +++ linux-2.6.13/fs/ext2/xattr.h 2005-07-06 10:55:37.000000000 -0400
> @@ -64,6 +64,7 @@ extern struct xattr_handler ext2_xattr_s
>
> extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
>
> +extern int ext2_init_security(struct inode *inode, struct inode *dir);
> extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
> extern int ext2_xattr_set(struct inode *, int, const char *, const void *,
> size_t, int);
>
> diff -X /home/sds/dontdiff -rup linux-2.6.13.clean/fs/ext2/xattr_security.c
> linux-2.6.13/fs/ext2/xattr_security.c
> --- linux-2.6.13.clean/fs/ext2/xattr_security.c 2005-06-17
> 15:48:29.000000000 -0400
> +++ linux-2.6.13/fs/ext2/xattr_security.c 2005-07-06 10:56:20.000000000
> -0400
> @@ -8,6 +8,7 @@
> #include <linux/fs.h>
> #include <linux/smp_lock.h>
> #include <linux/ext2_fs.h>
> +#include <linux/security.h>
> #include "xattr.h"
>
> static size_t
> @@ -45,6 +46,27 @@ ext2_xattr_security_set(struct inode *in
> value, size, flags);
> }
>
> +int
> +ext2_init_security(struct inode *inode, struct inode *dir)
> +{
> + int err;
> + size_t len;
> + void *value;
> + char *name;
> +
> + err = security_inode_init_security(inode, dir, &name, &value, &len);
> + if (err) {
> + if (err == -EOPNOTSUPP)
> + return 0;
> + return err;
> + }
> + err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY,
> + name, value, len, 0);
> + kfree(name);
> + kfree(value);
> + return err;
> +}
> +
> struct xattr_handler ext2_xattr_security_handler = {
> .prefix = XATTR_SECURITY_PREFIX,
> .list = ext2_xattr_security_list,
>
--
David Kleikamp
IBM Linux Technology Center
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html