diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index fff66741f18d5db2ef85579eef21a5f3ff9ec46b..61746b5866d81d6b494be4dbca2916af1fc38b31 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1007,6 +1007,13 @@ int __perf_session__process_events(struct perf_session *session, file_pos = file_offset + head; more: + /* + * Ensure we have enough space remaining to read + * the size of the event in the headers. + */ + if (head + sizeof(event->header) > mmap_size) + goto remap; + event = (union perf_event *)(buf + head); if (session->header.needs_swap)