.. | .. |
---|
50 | 50 | int error; |
---|
51 | 51 | |
---|
52 | 52 | sec->name = NULL; |
---|
| 53 | + sec->value = NULL; |
---|
53 | 54 | |
---|
54 | 55 | /* Don't add selinux attributes on xattrs - they'll never get used */ |
---|
55 | 56 | if (IS_PRIVATE(dir)) |
---|
.. | .. |
---|
81 | 82 | struct inode *inode, |
---|
82 | 83 | struct reiserfs_security_handle *sec) |
---|
83 | 84 | { |
---|
| 85 | + char xattr_name[XATTR_NAME_MAX + 1] = XATTR_SECURITY_PREFIX; |
---|
84 | 86 | int error; |
---|
85 | | - if (strlen(sec->name) < sizeof(XATTR_SECURITY_PREFIX)) |
---|
| 87 | + |
---|
| 88 | + if (XATTR_SECURITY_PREFIX_LEN + strlen(sec->name) > XATTR_NAME_MAX) |
---|
86 | 89 | return -EINVAL; |
---|
87 | 90 | |
---|
88 | | - 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, |
---|
89 | 94 | sec->length, XATTR_CREATE); |
---|
90 | 95 | if (error == -ENODATA || error == -EOPNOTSUPP) |
---|
91 | 96 | error = 0; |
---|
.. | .. |
---|
95 | 100 | |
---|
96 | 101 | void reiserfs_security_free(struct reiserfs_security_handle *sec) |
---|
97 | 102 | { |
---|
98 | | - kfree(sec->name); |
---|
99 | 103 | kfree(sec->value); |
---|
100 | 104 | sec->name = NULL; |
---|
101 | 105 | sec->value = NULL; |
---|