X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Findex%2Findex.c;h=9bfb56fa0b7a6a3c9c475e028473c297a9e5779a;hb=6dabdfa2f97ccfd101bd119bd1ab637ddb20e22f;hp=b5591d137c923a97617005f9a85145e09264cba4;hpb=f8f3885cc52af9d3c951da78989d6f4a25270411;p=lttng-tools.git diff --git a/src/common/index/index.c b/src/common/index/index.c index b5591d137..9bfb56fa0 100644 --- a/src/common/index/index.c +++ b/src/common/index/index.c @@ -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"); - ret = -1; 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 fd; + size_t len; ssize_t ret; - int fd = index_file->fd; - size_t len = index_file->element_len; + assert(index_file); assert(element); + fd = index_file->fd; + len = index_file->element_len; + 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); - if (ret < len) { + if (ret < 0) { PERROR("read index file"); goto error; } + if (ret < len) { + ERR("lttng_read expected %zu, returned %zd", len, ret); + goto 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) { - if (errno == ENOENT) { - ret = -ENOENT; - } else { - PERROR("opening index in read-only"); - } + PERROR("opening index in read-only"); 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; } + 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; @@ -263,7 +270,6 @@ error_close: PERROR("close read fd %d", read_fd); } } - ret = -1; error: free(index_file);