Skip to content

Commit

Permalink
[PATCH] ext3: Enable atomic inode security labeling
Browse files Browse the repository at this point in the history
This patch modifies ext3 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 as part of the same transaction.  This parallels
the existing processing for setting ACLs on newly created inodes.

Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
stephensmalley authored and Linus Torvalds committed Sep 9, 2005
1 parent 10f47e6 commit ac50960
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 0 deletions.
5 changes: 5 additions & 0 deletions fs/ext3/ialloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,11 @@ struct inode *ext3_new_inode(handle_t *handle, struct inode * dir, int mode)
DQUOT_DROP(inode);
goto fail2;
}
err = ext3_init_security(handle,inode, dir);
if (err) {
DQUOT_FREE_INODE(inode);
goto fail2;
}
err = ext3_mark_inode_dirty(handle, inode);
if (err) {
ext3_std_error(sb, err);
Expand Down
11 changes: 11 additions & 0 deletions fs/ext3/xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,14 @@ exit_ext3_xattr(void)
#define ext3_xattr_handlers NULL

# endif /* CONFIG_EXT3_FS_XATTR */

#ifdef CONFIG_EXT3_FS_SECURITY
extern int ext3_init_security(handle_t *handle, struct inode *inode,
struct inode *dir);
#else
static inline int ext3_init_security(handle_t *handle, struct inode *inode,
struct inode *dir)
{
return 0;
}
#endif
22 changes: 22 additions & 0 deletions fs/ext3/xattr_security.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <linux/smp_lock.h>
#include <linux/ext3_jbd.h>
#include <linux/ext3_fs.h>
#include <linux/security.h>
#include "xattr.h"

static size_t
Expand Down Expand Up @@ -47,6 +48,27 @@ ext3_xattr_security_set(struct inode *inode, const char *name,
value, size, flags);
}

int
ext3_init_security(handle_t *handle, 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 = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY,
name, value, len, 0);
kfree(name);
kfree(value);
return err;
}

struct xattr_handler ext3_xattr_security_handler = {
.prefix = XATTR_SECURITY_PREFIX,
.list = ext3_xattr_security_list,
Expand Down

0 comments on commit ac50960

Please sign in to comment.