Blame view
fs/ext4/xattr_security.c
2.05 KB
ac27a0ec1 [PATCH] ext4: ini... |
1 |
/* |
617ba13b3 [PATCH] ext4: ren... |
2 |
* linux/fs/ext4/xattr_security.c |
ac27a0ec1 [PATCH] ext4: ini... |
3 4 |
* Handler for storing security labels as extended attributes. */ |
ac27a0ec1 [PATCH] ext4: ini... |
5 6 |
#include <linux/string.h> #include <linux/fs.h> |
ac27a0ec1 [PATCH] ext4: ini... |
7 |
#include <linux/security.h> |
5a0e3ad6a include cleanup: ... |
8 |
#include <linux/slab.h> |
3dcf54515 ext4: move header... |
9 10 |
#include "ext4_jbd2.h" #include "ext4.h" |
ac27a0ec1 [PATCH] ext4: ini... |
11 12 13 |
#include "xattr.h" static size_t |
431547b3c sanitize xattr ha... |
14 15 |
ext4_xattr_security_list(struct dentry *dentry, char *list, size_t list_size, const char *name, size_t name_len, int type) |
ac27a0ec1 [PATCH] ext4: ini... |
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
{ const size_t prefix_len = sizeof(XATTR_SECURITY_PREFIX)-1; const size_t total_len = prefix_len + name_len + 1; if (list && total_len <= list_size) { memcpy(list, XATTR_SECURITY_PREFIX, prefix_len); memcpy(list+prefix_len, name, name_len); list[prefix_len + name_len] = '\0'; } return total_len; } static int |
431547b3c sanitize xattr ha... |
30 31 |
ext4_xattr_security_get(struct dentry *dentry, const char *name, void *buffer, size_t size, int type) |
ac27a0ec1 [PATCH] ext4: ini... |
32 33 34 |
{ if (strcmp(name, "") == 0) return -EINVAL; |
431547b3c sanitize xattr ha... |
35 36 |
return ext4_xattr_get(dentry->d_inode, EXT4_XATTR_INDEX_SECURITY, name, buffer, size); |
ac27a0ec1 [PATCH] ext4: ini... |
37 38 39 |
} static int |
431547b3c sanitize xattr ha... |
40 41 |
ext4_xattr_security_set(struct dentry *dentry, const char *name, const void *value, size_t size, int flags, int type) |
ac27a0ec1 [PATCH] ext4: ini... |
42 43 44 |
{ if (strcmp(name, "") == 0) return -EINVAL; |
431547b3c sanitize xattr ha... |
45 46 |
return ext4_xattr_set(dentry->d_inode, EXT4_XATTR_INDEX_SECURITY, name, value, size, flags); |
ac27a0ec1 [PATCH] ext4: ini... |
47 |
} |
176576dbc ext4: make local ... |
48 49 50 |
static int ext4_initxattrs(struct inode *inode, const struct xattr *xattr_array, void *fs_info) |
ac27a0ec1 [PATCH] ext4: ini... |
51 |
{ |
9d8f13ba3 security: new sec... |
52 53 54 |
const struct xattr *xattr; handle_t *handle = fs_info; int err = 0; |
ac27a0ec1 [PATCH] ext4: ini... |
55 |
|
9d8f13ba3 security: new sec... |
56 57 58 59 60 61 62 |
for (xattr = xattr_array; xattr->name != NULL; xattr++) { err = ext4_xattr_set_handle(handle, inode, EXT4_XATTR_INDEX_SECURITY, xattr->name, xattr->value, xattr->value_len, 0); if (err < 0) break; |
ac27a0ec1 [PATCH] ext4: ini... |
63 |
} |
ac27a0ec1 [PATCH] ext4: ini... |
64 65 |
return err; } |
9d8f13ba3 security: new sec... |
66 67 68 69 70 71 72 |
int ext4_init_security(handle_t *handle, struct inode *inode, struct inode *dir, const struct qstr *qstr) { return security_inode_init_security(inode, dir, qstr, &ext4_initxattrs, handle); } |
11e275280 ext4: constify xa... |
73 |
const struct xattr_handler ext4_xattr_security_handler = { |
ac27a0ec1 [PATCH] ext4: ini... |
74 |
.prefix = XATTR_SECURITY_PREFIX, |
617ba13b3 [PATCH] ext4: ren... |
75 76 77 |
.list = ext4_xattr_security_list, .get = ext4_xattr_security_get, .set = ext4_xattr_security_set, |
ac27a0ec1 [PATCH] ext4: ini... |
78 |
}; |