tracing: add size checks for exported ftrace internal structures
authorSteven Rostedt <srostedt@redhat.com>
Thu, 26 Mar 2009 15:43:36 +0000 (11:43 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Fri, 24 Apr 2009 03:03:56 +0000 (23:03 -0400)
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>
kernel/trace/trace_events.c
kernel/trace/trace_export.c

index 9887131afa03a2428a3d4fa1d68db6bdbe69d15a..b92081588088dbe4451c25fa94866c7af8cd9904 100644 (file)
@@ -381,8 +381,11 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
        return cnt;
 }
 
+extern char *__bad_type_size(void);
+
 #undef FIELD
 #define FIELD(type, name)                                              \
+       sizeof(type) != sizeof(field.name) ? __bad_type_size() :        \
        #type, "common_" #name, offsetof(typeof(field), name),          \
                sizeof(field.name)
 
index 48fc02fe73a09a24ff424b365d0fd37cb8f5e7d2..0cb1a142c74fd88971befdb7d7d3a234ac8f6231 100644 (file)
 #undef TRACE_STRUCT
 #define TRACE_STRUCT(args...) args
 
+extern void __bad_type_size(void);
+
 #undef TRACE_FIELD
 #define TRACE_FIELD(type, item, assign)                                        \
+       if (sizeof(type) != sizeof(field.item))                         \
+               __bad_type_size();                                      \
        ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t"      \
                               "offset:%u;\tsize:%u;\n",                \
                               (unsigned int)offsetof(typeof(field), item), \
This page took 0.026526 seconds and 5 git commands to generate.