From: Wang Nan <wangnan0@huawei.com>
To: <jolsa@kernel.org>, <acme@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <pi3orama@163.com>,
<lizefan@huawei.com>, Wang Nan <wangnan0@huawei.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
He Kuang <hekuang@huawei.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
Namhyung Kim <namhyung@kernel.org>
Subject: [PATCH] perf tools: Fix mmap2 event allocation in synthesize code
Date: Wed, 6 Jan 2016 03:41:23 +0000 [thread overview]
Message-ID: <1452051683-21916-1-git-send-email-wangnan0@huawei.com> (raw)
perf_event__synthesize_mmap_events() issues mmap2 events, but the
memory of that event is allocated using:
mmap_event = malloc(sizeof(mmap_event->mmap) + machine->id_hdr_size);
If path of mmap source file is long (near PATH_MAX), random crash
would happen. Should use sizeof(mmap_event->mmap2).
Fix two memory allocations and rename all mmap_event to mmap2_event
to make it clear.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
---
tools/perf/util/event.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index cd61bb1..cde8228 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -413,7 +413,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool,
}
static int __event__synthesize_thread(union perf_event *comm_event,
- union perf_event *mmap_event,
+ union perf_event *mmap2_event,
union perf_event *fork_event,
pid_t pid, int full,
perf_event__handler_t process,
@@ -436,7 +436,7 @@ static int __event__synthesize_thread(union perf_event *comm_event,
if (tgid == -1)
return -1;
- return perf_event__synthesize_mmap_events(tool, mmap_event, pid, tgid,
+ return perf_event__synthesize_mmap_events(tool, mmap2_event, pid, tgid,
process, machine, mmap_data,
proc_map_timeout);
}
@@ -478,7 +478,7 @@ static int __event__synthesize_thread(union perf_event *comm_event,
rc = 0;
if (_pid == pid) {
/* process the parent's maps too */
- rc = perf_event__synthesize_mmap_events(tool, mmap_event, pid, tgid,
+ rc = perf_event__synthesize_mmap_events(tool, mmap2_event, pid, tgid,
process, machine, mmap_data, proc_map_timeout);
if (rc)
break;
@@ -496,15 +496,15 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
bool mmap_data,
unsigned int proc_map_timeout)
{
- union perf_event *comm_event, *mmap_event, *fork_event;
+ union perf_event *comm_event, *mmap2_event, *fork_event;
int err = -1, thread, j;
comm_event = malloc(sizeof(comm_event->comm) + machine->id_hdr_size);
if (comm_event == NULL)
goto out;
- mmap_event = malloc(sizeof(mmap_event->mmap) + machine->id_hdr_size);
- if (mmap_event == NULL)
+ mmap2_event = malloc(sizeof(mmap2_event->mmap2) + machine->id_hdr_size);
+ if (mmap2_event == NULL)
goto out_free_comm;
fork_event = malloc(sizeof(fork_event->fork) + machine->id_hdr_size);
@@ -513,7 +513,7 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
err = 0;
for (thread = 0; thread < threads->nr; ++thread) {
- if (__event__synthesize_thread(comm_event, mmap_event,
+ if (__event__synthesize_thread(comm_event, mmap2_event,
fork_event,
thread_map__pid(threads, thread), 0,
process, tool, machine,
@@ -539,7 +539,7 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
/* if not, generate events for it */
if (need_leader &&
- __event__synthesize_thread(comm_event, mmap_event,
+ __event__synthesize_thread(comm_event, mmap2_event,
fork_event,
comm_event->comm.pid, 0,
process, tool, machine,
@@ -551,7 +551,7 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
}
free(fork_event);
out_free_mmap:
- free(mmap_event);
+ free(mmap2_event);
out_free_comm:
free(comm_event);
out:
@@ -567,7 +567,7 @@ int perf_event__synthesize_threads(struct perf_tool *tool,
DIR *proc;
char proc_path[PATH_MAX];
struct dirent dirent, *next;
- union perf_event *comm_event, *mmap_event, *fork_event;
+ union perf_event *comm_event, *mmap2_event, *fork_event;
int err = -1;
if (machine__is_default_guest(machine))
@@ -577,8 +577,8 @@ int perf_event__synthesize_threads(struct perf_tool *tool,
if (comm_event == NULL)
goto out;
- mmap_event = malloc(sizeof(mmap_event->mmap) + machine->id_hdr_size);
- if (mmap_event == NULL)
+ mmap2_event = malloc(sizeof(mmap2_event->mmap2) + machine->id_hdr_size);
+ if (mmap2_event == NULL)
goto out_free_comm;
fork_event = malloc(sizeof(fork_event->fork) + machine->id_hdr_size);
@@ -601,7 +601,7 @@ int perf_event__synthesize_threads(struct perf_tool *tool,
* We may race with exiting thread, so don't stop just because
* one thread couldn't be synthesized.
*/
- __event__synthesize_thread(comm_event, mmap_event, fork_event, pid,
+ __event__synthesize_thread(comm_event, mmap2_event, fork_event, pid,
1, process, tool, machine, mmap_data,
proc_map_timeout);
}
@@ -611,7 +611,7 @@ int perf_event__synthesize_threads(struct perf_tool *tool,
out_free_fork:
free(fork_event);
out_free_mmap:
- free(mmap_event);
+ free(mmap2_event);
out_free_comm:
free(comm_event);
out:
--
1.8.3.4
next reply other threads:[~2016-01-06 3:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-06 3:41 Wang Nan [this message]
2016-01-06 11:15 ` Jiri Olsa
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=1452051683-21916-1-git-send-email-wangnan0@huawei.com \
--to=wangnan0@huawei.com \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=hekuang@huawei.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=namhyung@kernel.org \
--cc=pi3orama@163.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®