| .. | .. |
|---|
| 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; |
|---|