|
@@ -1094,8 +1094,10 @@ more:
|
|
|
perf_event_header__bswap(&event->header);
|
|
|
|
|
|
size = event->header.size;
|
|
|
- if (size == 0)
|
|
|
- size = 8;
|
|
|
+ if (size < sizeof(struct perf_event_header)) {
|
|
|
+ pr_err("bad event header size\n");
|
|
|
+ goto out_err;
|
|
|
+ }
|
|
|
|
|
|
if (size > cur_size) {
|
|
|
void *new = realloc(buf, size);
|
|
@@ -1164,8 +1166,12 @@ fetch_mmaped_event(struct perf_session *session,
|
|
|
if (session->header.needs_swap)
|
|
|
perf_event_header__bswap(&event->header);
|
|
|
|
|
|
- if (head + event->header.size > mmap_size)
|
|
|
+ if (head + event->header.size > mmap_size) {
|
|
|
+ /* We're not fetching the event so swap back again */
|
|
|
+ if (session->header.needs_swap)
|
|
|
+ perf_event_header__bswap(&event->header);
|
|
|
return NULL;
|
|
|
+ }
|
|
|
|
|
|
return event;
|
|
|
}
|
|
@@ -1245,7 +1251,7 @@ more:
|
|
|
|
|
|
size = event->header.size;
|
|
|
|
|
|
- if (size == 0 ||
|
|
|
+ if (size < sizeof(struct perf_event_header) ||
|
|
|
perf_session__process_event(session, event, tool, file_pos) < 0) {
|
|
|
pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
|
|
|
file_offset + head, event->header.size,
|