Fix: out-of-bound memory access
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 9 Feb 2016 18:27:22 +0000 (13:27 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 12 Feb 2016 22:57:47 +0000 (17:57 -0500)
We need to check for end of stream before updating the current packet
index, else we access memory beyond the last stream packet index array
element. This fixes valgrind errors which appear at commit

480ef05 Support ctf index version 1.1

due to change of the element size, but actually caused by commit

2654fe9 Fix: events discarded timing inaccuracy

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
formats/ctf/ctf.c

index 9cb19f4dc323159be1da0bb8e4b00b3526577ffd..fb9b2333cf63180a208ace408b9d9b1b90deebc4 100644 (file)
@@ -936,6 +936,11 @@ void ctf_packet_seek(struct bt_stream_pos *stream_pos, size_t index, int whence)
                        assert(0);
                }
 
                        assert(0);
                }
 
+               if (pos->cur_index >= pos->packet_index->len) {
+                       pos->offset = EOF;
+                       return;
+               }
+
                packet_index = &g_array_index(pos->packet_index,
                                struct packet_index, pos->cur_index);
                if (pos->cur_index > 0) {
                packet_index = &g_array_index(pos->packet_index,
                                struct packet_index, pos->cur_index);
                if (pos->cur_index > 0) {
@@ -948,11 +953,6 @@ void ctf_packet_seek(struct bt_stream_pos *stream_pos, size_t index, int whence)
                ctf_update_current_packet_index(&file_stream->parent,
                                prev_index, packet_index);
 
                ctf_update_current_packet_index(&file_stream->parent,
                                prev_index, packet_index);
 
-               if (pos->cur_index >= pos->packet_index->len) {
-                       pos->offset = EOF;
-                       return;
-               }
-
                /*
                 * We need to check if we are in trace read or called
                 * from packet indexing.  In this last case, the
                /*
                 * We need to check if we are in trace read or called
                 * from packet indexing.  In this last case, the
This page took 0.025594 seconds and 4 git commands to generate.