}
/* update trace_packet_header and stream_packet_context */
- if (file_stream->stream.trace_packet_header) {
+ if (pos->prot != PROT_WRITE && file_stream->stream.trace_packet_header) {
/* Read packet header */
ret = generic_rw(&pos->parent, &file_stream->stream.trace_packet_header->p);
assert(!ret);
}
- if (file_stream->stream.stream_packet_context) {
+ if (pos->prot != PROT_WRITE && file_stream->stream.stream_packet_context) {
/* Read packet context */
ret = generic_rw(&pos->parent, &file_stream->stream.stream_packet_context->p);
assert(!ret);
return -EINVAL;
}
- toread = header.content_size / CHAR_BIT;
+ toread = (header.content_size / CHAR_BIT) - header_sizeof(header);
for (;;) {
readlen = fread(buf, sizeof(char), min(sizeof(buf), toread), in);
if (ret < 0)
return ret;
+ if (filestats.st_size < MAX_PACKET_HEADER_LEN / CHAR_BIT)
+ return -EINVAL;
+
for (pos->mmap_offset = 0; pos->mmap_offset < filestats.st_size; ) {
uint64_t stream_id = 0;