.. | .. |
---|
11 | 11 | |
---|
12 | 12 | static int |
---|
13 | 13 | security_get(const struct xattr_handler *handler, struct dentry *unused, |
---|
14 | | - struct inode *inode, const char *name, void *buffer, size_t size) |
---|
| 14 | + struct inode *inode, const char *name, void *buffer, size_t size, |
---|
| 15 | + int flags) |
---|
15 | 16 | { |
---|
16 | 17 | if (IS_PRIVATE(inode)) |
---|
17 | 18 | return -EPERM; |
---|
.. | .. |
---|
49 | 50 | int error; |
---|
50 | 51 | |
---|
51 | 52 | sec->name = NULL; |
---|
| 53 | + sec->value = NULL; |
---|
52 | 54 | |
---|
53 | 55 | /* Don't add selinux attributes on xattrs - they'll never get used */ |
---|
54 | 56 | if (IS_PRIVATE(dir)) |
---|
.. | .. |
---|
80 | 82 | struct inode *inode, |
---|
81 | 83 | struct reiserfs_security_handle *sec) |
---|
82 | 84 | { |
---|
| 85 | + char xattr_name[XATTR_NAME_MAX + 1] = XATTR_SECURITY_PREFIX; |
---|
83 | 86 | int error; |
---|
84 | | - if (strlen(sec->name) < sizeof(XATTR_SECURITY_PREFIX)) |
---|
| 87 | + |
---|
| 88 | + if (XATTR_SECURITY_PREFIX_LEN + strlen(sec->name) > XATTR_NAME_MAX) |
---|
85 | 89 | return -EINVAL; |
---|
86 | 90 | |
---|
87 | | - error = reiserfs_xattr_set_handle(th, inode, sec->name, sec->value, |
---|
| 91 | + strlcat(xattr_name, sec->name, sizeof(xattr_name)); |
---|
| 92 | + |
---|
| 93 | + error = reiserfs_xattr_set_handle(th, inode, xattr_name, sec->value, |
---|
88 | 94 | sec->length, XATTR_CREATE); |
---|
89 | 95 | if (error == -ENODATA || error == -EOPNOTSUPP) |
---|
90 | 96 | error = 0; |
---|
.. | .. |
---|
94 | 100 | |
---|
95 | 101 | void reiserfs_security_free(struct reiserfs_security_handle *sec) |
---|
96 | 102 | { |
---|
97 | | - kfree(sec->name); |
---|
98 | 103 | kfree(sec->value); |
---|
99 | 104 | sec->name = NULL; |
---|
100 | 105 | sec->value = NULL; |
---|