projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: relayd: handling of lttng_read errors >= 0
[lttng-tools.git]
/
src
/
common
/
index
/
index.c
diff --git
a/src/common/index/index.c
b/src/common/index/index.c
index b5591d137c923a97617005f9a85145e09264cba4..40ac0de199cd53bdcba43bb80bbd91253e63276e 100644
(file)
--- a/
src/common/index/index.c
+++ b/
src/common/index/index.c
@@
-35,7
+35,7
@@
*
* Return allocated struct lttng_index_file, NULL on error.
*/
*
* Return allocated struct lttng_index_file, NULL on error.
*/
-struct lttng_index_file *lttng_index_file_create(char *path_name,
+struct lttng_index_file *lttng_index_file_create(c
onst c
har *path_name,
char *stream_name, int uid, int gid,
uint64_t size, uint64_t count, uint32_t major, uint32_t minor)
{
char *stream_name, int uid, int gid,
uint64_t size, uint64_t count, uint32_t major, uint32_t minor)
{
@@
-96,7
+96,6
@@
struct lttng_index_file *lttng_index_file_create(char *path_name,
size_ret = lttng_write(fd, &hdr, sizeof(hdr));
if (size_ret < sizeof(hdr)) {
PERROR("write index header");
size_ret = lttng_write(fd, &hdr, sizeof(hdr));
if (size_ret < sizeof(hdr)) {
PERROR("write index header");
- ret = -1;
goto error;
}
index_file->fd = fd;
goto error;
}
index_file->fd = fd;
@@
-128,12
+127,16
@@
error:
int lttng_index_file_write(const struct lttng_index_file *index_file,
const struct ctf_packet_index *element)
{
int lttng_index_file_write(const struct lttng_index_file *index_file,
const struct ctf_packet_index *element)
{
+ int fd;
+ size_t len;
ssize_t ret;
ssize_t ret;
- int fd = index_file->fd;
- size_t len = index_file->element_len;
+ assert(index_file);
assert(element);
assert(element);
+ fd = index_file->fd;
+ len = index_file->element_len;
+
if (fd < 0) {
goto error;
}
if (fd < 0) {
goto error;
}
@@
-168,10
+171,14
@@
int lttng_index_file_read(const struct lttng_index_file *index_file,
}
ret = lttng_read(fd, element, len);
}
ret = lttng_read(fd, element, len);
- if (ret <
len
) {
+ if (ret <
0
) {
PERROR("read index file");
goto error;
}
PERROR("read index file");
goto error;
}
+ if (ret < len) {
+ ERR("lttng_read expected %zu, returned %zd", len, ret);
+ goto error;
+ }
return 0;
error:
return 0;
error:
@@
-219,11
+226,7
@@
struct lttng_index_file *lttng_index_file_open(const char *path_name,
DBG("Index opening file %s in read only", fullpath);
read_fd = open(fullpath, O_RDONLY);
if (read_fd < 0) {
DBG("Index opening file %s in read only", fullpath);
read_fd = open(fullpath, O_RDONLY);
if (read_fd < 0) {
- if (errno == ENOENT) {
- ret = -ENOENT;
- } else {
- PERROR("opening index in read-only");
- }
+ PERROR("opening index in read-only");
goto error;
}
goto error;
}
@@
-245,6
+248,10
@@
struct lttng_index_file *lttng_index_file_open(const char *path_name,
ERR("Invalid header version");
goto error_close;
}
ERR("Invalid header version");
goto error_close;
}
+ if (element_len > sizeof(struct ctf_packet_index)) {
+ ERR("Index element length too long");
+ goto error_close;
+ }
index_file->fd = read_fd;
index_file->major = major;
index_file->fd = read_fd;
index_file->major = major;
@@
-263,7
+270,6
@@
error_close:
PERROR("close read fd %d", read_fd);
}
}
PERROR("close read fd %d", read_fd);
}
}
- ret = -1;
error:
free(index_file);
error:
free(index_file);
This page took
0.024021 seconds
and
4
git commands to generate.