aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evsel.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index c5748c52318f..e389815078d3 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -449,6 +449,8 @@ int perf_event__parse_sample(const union perf_event *event, u64 type,
449 } 449 }
450 450
451 if (type & PERF_SAMPLE_RAW) { 451 if (type & PERF_SAMPLE_RAW) {
452 const u64 *pdata;
453
452 u.val64 = *array; 454 u.val64 = *array;
453 if (WARN_ONCE(swapped, 455 if (WARN_ONCE(swapped,
454 "Endianness of raw data not corrected!\n")) { 456 "Endianness of raw data not corrected!\n")) {
@@ -462,11 +464,12 @@ int perf_event__parse_sample(const union perf_event *event, u64 type,
462 return -EFAULT; 464 return -EFAULT;
463 465
464 data->raw_size = u.val32[0]; 466 data->raw_size = u.val32[0];
467 pdata = (void *) array + sizeof(u32);
465 468
466 if (sample_overlap(event, &u.val32[1], data->raw_size)) 469 if (sample_overlap(event, pdata, data->raw_size))
467 return -EFAULT; 470 return -EFAULT;
468 471
469 data->raw_data = &u.val32[1]; 472 data->raw_data = (void *) pdata;
470 } 473 }
471 474
472 return 0; 475 return 0;