diff options
Diffstat (limited to 'fs/ext3/xattr_security.c')
-rw-r--r-- | fs/ext3/xattr_security.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/ext3/xattr_security.c b/fs/ext3/xattr_security.c index ddc1c41750e1..b9c40c15647b 100644 --- a/fs/ext3/xattr_security.c +++ b/fs/ext3/xattr_security.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/smp_lock.h> | 9 | #include <linux/smp_lock.h> |
10 | #include <linux/ext3_jbd.h> | 10 | #include <linux/ext3_jbd.h> |
11 | #include <linux/ext3_fs.h> | 11 | #include <linux/ext3_fs.h> |
12 | #include <linux/security.h> | ||
12 | #include "xattr.h" | 13 | #include "xattr.h" |
13 | 14 | ||
14 | static size_t | 15 | static size_t |
@@ -47,6 +48,27 @@ ext3_xattr_security_set(struct inode *inode, const char *name, | |||
47 | value, size, flags); | 48 | value, size, flags); |
48 | } | 49 | } |
49 | 50 | ||
51 | int | ||
52 | ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir) | ||
53 | { | ||
54 | int err; | ||
55 | size_t len; | ||
56 | void *value; | ||
57 | char *name; | ||
58 | |||
59 | err = security_inode_init_security(inode, dir, &name, &value, &len); | ||
60 | if (err) { | ||
61 | if (err == -EOPNOTSUPP) | ||
62 | return 0; | ||
63 | return err; | ||
64 | } | ||
65 | err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, | ||
66 | name, value, len, 0); | ||
67 | kfree(name); | ||
68 | kfree(value); | ||
69 | return err; | ||
70 | } | ||
71 | |||
50 | struct xattr_handler ext3_xattr_security_handler = { | 72 | struct xattr_handler ext3_xattr_security_handler = { |
51 | .prefix = XATTR_SECURITY_PREFIX, | 73 | .prefix = XATTR_SECURITY_PREFIX, |
52 | .list = ext3_xattr_security_list, | 74 | .list = ext3_xattr_security_list, |