linux-perf: Fix use of uninitialized variables

This commit is contained in:
Ben Hutchings 2016-03-20 21:20:16 +00:00
parent 6e0082081c
commit fd89731014
3 changed files with 73 additions and 0 deletions

3
debian/changelog vendored
View File

@ -2,6 +2,9 @@ linux-tools (4.5-1~exp1) UNRELEASED; urgency=medium
* New upstream release
[ Ben Hutchings ]
* linux-perf: Fix use of uninitialized variables
-- Ben Hutchings <ben@decadent.org.uk> Sun, 20 Mar 2016 15:31:39 +0000
linux-tools (4.5~rc7-1~exp1) experimental; urgency=medium

View File

@ -20,3 +20,4 @@ revert-perf-tools-x86-build-perf-on-older-user-space.patch
lockdep-add-missing-macros.patch
tools-build-remove-bpf-run-time-check-at-build-time.patch
power-cpupower-fix-manpages-NAME.patch
tools-lib-traceevent-fix-use-of-uninitialized-variables.patches

View File

@ -0,0 +1,69 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 20 Mar 2016 21:09:02 +0000
Subject: tools lib traceevent: Fix use of uninitialized variables
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>
---
--- a/tools/lib/traceevent/kbuffer-parse.c
+++ b/tools/lib/traceevent/kbuffer-parse.c
@@ -314,6 +314,7 @@ static unsigned int old_update_pointers(
extend <<= TS_SHIFT;
extend += delta;
delta = extend;
+ length = 0;
ptr += 4;
break;
@@ -613,7 +614,7 @@ unsigned long long kbuffer_timestamp(str
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;
--- a/tools/lib/traceevent/plugin_function.c
+++ b/tools/lib/traceevent/plugin_function.c
@@ -142,10 +142,10 @@ static int function_handler(struct trace
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);