aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-03-26 11:43:36 -0400
committerSteven Rostedt <rostedt@goodmis.org>2009-04-23 23:03:56 -0400
commit75db37d2f4c0ad9466ead57d467277d097b4105c (patch)
treea5b3f305471e9f544772353304608f8dca1c2226 /kernel
parent89ec0dee9eba6275d47be0b878cf5f6d5c2fb6eb (diff)
tracing: add size checks for exported ftrace internal structures
The events exported by TRACE_EVENT are automated and are guaranteed to be correct when used. The internal ftrace structures on the other hand are more manually exported. These require the ftrace maintainer to make sure they are up to date. This patch adds a size check to help flag when a type changes in an internal ftrace data structure, and the update needs to be reflected in the export. If a export is incorrect, then the only harm is that the user space tools will not know how to correctly read the internal structures of ftrace. [ Impact: help prevent inconsistent ftrace format print outs ] Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace_events.c3
-rw-r--r--kernel/trace/trace_export.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 9887131afa03..b92081588088 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -381,8 +381,11 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
381 return cnt; 381 return cnt;
382} 382}
383 383
384extern char *__bad_type_size(void);
385
384#undef FIELD 386#undef FIELD
385#define FIELD(type, name) \ 387#define FIELD(type, name) \
388 sizeof(type) != sizeof(field.name) ? __bad_type_size() : \
386 #type, "common_" #name, offsetof(typeof(field), name), \ 389 #type, "common_" #name, offsetof(typeof(field), name), \
387 sizeof(field.name) 390 sizeof(field.name)
388 391
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
index 48fc02fe73a0..0cb1a142c74f 100644
--- a/kernel/trace/trace_export.c
+++ b/kernel/trace/trace_export.c
@@ -19,8 +19,12 @@
19#undef TRACE_STRUCT 19#undef TRACE_STRUCT
20#define TRACE_STRUCT(args...) args 20#define TRACE_STRUCT(args...) args
21 21
22extern void __bad_type_size(void);
23
22#undef TRACE_FIELD 24#undef TRACE_FIELD
23#define TRACE_FIELD(type, item, assign) \ 25#define TRACE_FIELD(type, item, assign) \
26 if (sizeof(type) != sizeof(field.item)) \
27 __bad_type_size(); \
24 ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \ 28 ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \
25 "offset:%u;\tsize:%u;\n", \ 29 "offset:%u;\tsize:%u;\n", \
26 (unsigned int)offsetof(typeof(field), item), \ 30 (unsigned int)offsetof(typeof(field), item), \