aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/event.h
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2011-05-21 13:33:04 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2011-05-21 21:38:36 -0400
commita285412479b6d5af3e48273a92ec2f1987df8cd1 (patch)
tree29f68684cebb26b86c3dd0b0f0fc4e5d6553c989 /tools/perf/util/event.h
parent74429964d8e29c0107fa6e9cdf35b8f33f57405d (diff)
perf tools: Pre-check sample size before parsing
Check that the total size of the sample fields having a fixed size do not exceed the one of the whole event. This robustifies the sample parsing. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Stephane Eranian <eranian@google.com>
Diffstat (limited to 'tools/perf/util/event.h')
-rw-r--r--tools/perf/util/event.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
index 9c35170fb379..c08332871408 100644
--- a/tools/perf/util/event.h
+++ b/tools/perf/util/event.h
@@ -56,6 +56,13 @@ struct read_event {
56 u64 id; 56 u64 id;
57}; 57};
58 58
59
60#define PERF_SAMPLE_MASK \
61 (PERF_SAMPLE_IP | PERF_SAMPLE_TID | \
62 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR | \
63 PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID | \
64 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
65
59struct sample_event { 66struct sample_event {
60 struct perf_event_header header; 67 struct perf_event_header header;
61 u64 array[]; 68 u64 array[];
@@ -75,6 +82,8 @@ struct perf_sample {
75 struct ip_callchain *callchain; 82 struct ip_callchain *callchain;
76}; 83};
77 84
85int perf_sample_size(u64 sample_type);
86
78#define BUILD_ID_SIZE 20 87#define BUILD_ID_SIZE 20
79 88
80struct build_id_event { 89struct build_id_event {
@@ -178,6 +187,7 @@ int perf_event__preprocess_sample(const union perf_event *self,
178const char *perf_event__name(unsigned int id); 187const char *perf_event__name(unsigned int id);
179 188
180int perf_event__parse_sample(const union perf_event *event, u64 type, 189int perf_event__parse_sample(const union perf_event *event, u64 type,
181 bool sample_id_all, struct perf_sample *sample); 190 int sample_size, bool sample_id_all,
191 struct perf_sample *sample);
182 192
183#endif /* __PERF_RECORD_H */ 193#endif /* __PERF_RECORD_H */