tools lib traceevent: Fix use of uninitialized variables
authorBen Hutchings <ben@decadent.org.uk>
Sun, 20 Mar 2016 21:09:02 +0000 (21:09 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 28 Sep 2017 17:27:56 +0000 (18:27 +0100)
Fix a number of correct warnings from gcc:

> plugin_function.c:133:6: warning: 'index' may be used uninitialized in this function [-Wmaybe-uninitialized]
>   int index;
>       ^

'index' is initialized only if indentation is wanted.  Move the
printing of indentation using 'index' into the same if-statement.

> kbuffer-parse.c:339:27: warning: 'length' may be used uninitialized in this function [-Wmaybe-uninitialized]
>   kbuf->next = kbuf->index + length;
>                            ^
> kbuffer-parse.c:297:15: note: 'length' was declared here
>   unsigned int length;
>                ^

'length' is not initialized when handling an OLD_RINGBUF_TYPE_TIME_EXTEND
record.  Based on what trace-cmd does, set length = 0 in this case.

> kbuffer-parse.c: In function 'kbuffer_read_at_offset':
> kbuffer-parse.c:632:9: warning: 'data' may be used uninitialized in this function [-Wmaybe-uninitialized]
>   return data;
>          ^

'data' is not initialized if the offset is too small.  Initialize it
to NULL so that the behaviour is the same as when the offset is too
large.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name tools-lib-traceevent-fix-use-of-uninitialized-variables.patch

tools/lib/traceevent/kbuffer-parse.c
tools/lib/traceevent/plugin_function.c

index 65984f1c2974dd7d61d7af85729eed78ca7ddd46..56db64838c8e26f2fab74187a3d3147533f2dc79 100644 (file)
@@ -314,6 +314,7 @@ static unsigned int old_update_pointers(struct kbuffer *kbuf)
                extend <<= TS_SHIFT;
                extend += delta;
                delta = extend;
+               length = 0;
                ptr += 4;
                break;
 
@@ -613,7 +614,7 @@ unsigned long long kbuffer_timestamp(struct kbuffer *kbuf)
 void *kbuffer_read_at_offset(struct kbuffer *kbuf, int offset,
                             unsigned long long *ts)
 {
-       void *data;
+       void *data = NULL;
 
        if (offset < kbuf->start)
                offset = 0;
index a00ec190821aa352234ddf11f5d6ab3bb911dc5f..cb6b25c81aaf128bc41f547aaa30b979f9f8fbbe 100644 (file)
@@ -142,10 +142,10 @@ static int function_handler(struct trace_seq *s, struct pevent_record *record,
 
        parent = pevent_find_function(pevent, pfunction);
 
-       if (parent && ftrace_indent->set)
+       if (parent && ftrace_indent->set) {
                index = add_and_get_index(parent, func, record->cpu);
-
-       trace_seq_printf(s, "%*s", index*3, "");
+               trace_seq_printf(s, "%*s", index*3, "");
+       }
 
        if (func)
                trace_seq_printf(s, "%s", func);