From: Chandan Rajendra <chandanrlinux@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: Chandan Rajendra <chandanrlinux@gmail.com>,
ravi.bangoria@linux.ibm.com, peterz@infradead.org,
mingo@redhat.com, acme@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@redhat.com,
namhyung@kernel.org, rostedt@goodmis.org, tstoyanov@vmware.com,
gregkh@linuxfoundation.org, kstewart@linuxfoundation.org,
tglx@linutronix.de, chandan@linux.ibm.com
Subject: [PATCH] perf script: Fix obtaining next event
Date: Wed, 30 Oct 2019 14:10:32 +0530 [thread overview]
Message-ID: <20191030084032.31503-1-chandanrlinux@gmail.com> (raw)
The current code segfaults when perf.data file contains two or more
events. This happens due to incorrect pointer arithmetic being performed
in trace_find_next_event().
tep_handle->events is an array of pointers to 'struct tep_event'. The
pointer arithmetic interprets tep_handle->events as an array of 'struct
tep_event' elements.
This commit replaces the usage of pointer arithmetic with calls to
tep_get_event().
Fixes: bb3dd7e ("tools lib traceevent, perf tools: Move struct tep_handler definition in a local header file")
Signed-off-by: Chandan Rajendra <chandanrlinux@gmail.com>
---
tools/perf/util/trace-event-parse.c | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
index 5d6bfc70b210..7bf423a3631e 100644
--- a/tools/perf/util/trace-event-parse.c
+++ b/tools/perf/util/trace-event-parse.c
@@ -176,31 +176,21 @@ int parse_event_file(struct tep_handle *pevent,
struct tep_event *trace_find_next_event(struct tep_handle *pevent,
struct tep_event *event)
{
- static int idx;
+ int idx;
int events_count;
- struct tep_event *all_events;
- all_events = tep_get_first_event(pevent);
events_count = tep_get_events_count(pevent);
- if (!pevent || !all_events || events_count < 1)
+ if (!pevent || events_count < 1)
return NULL;
- if (!event) {
- idx = 0;
- return all_events;
- }
+ if (!event)
+ return tep_get_event(pevent, 0);
- if (idx < events_count && event == (all_events + idx)) {
- idx++;
- if (idx == events_count)
- return NULL;
- return (all_events + idx);
+ for (idx = 0; idx < events_count - 1; idx++) {
+ if (event == tep_get_event(pevent, idx))
+ return tep_get_event(pevent, idx + 1);
}
- for (idx = 1; idx < events_count; idx++) {
- if (event == (all_events + (idx - 1)))
- return (all_events + idx);
- }
return NULL;
}
--
2.19.1
next reply other threads:[~2019-10-30 8:40 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-30 8:40 Chandan Rajendra [this message]
2019-10-30 9:46 ` [PATCH] perf script: Fix obtaining next event Ravi Bangoria
2019-10-30 11:50 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191030084032.31503-1-chandanrlinux@gmail.com \
--to=chandanrlinux@gmail.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=chandan@linux.ibm.com \
--cc=gregkh@linuxfoundation.org \
--cc=jolsa@redhat.com \
--cc=kstewart@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=ravi.bangoria@linux.ibm.com \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=tstoyanov@vmware.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.