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, |
