aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/trace.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-07-02 18:56:34 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-07-02 18:56:34 +0100
commitac9fb799479f3a6dc1fbb09482324d591452ce07 (patch)
tree52f994dc113ffcdc58f54aac6282d1345b8283fa /xen/include/xen/trace.h
parentd505477d647f79c99e93e61425e8310c54f800b2 (diff)
downloadxen-ac9fb799479f3a6dc1fbb09482324d591452ce07.tar.gz
xen-ac9fb799479f3a6dc1fbb09482324d591452ce07.tar.bz2
xen-ac9fb799479f3a6dc1fbb09482324d591452ce07.zip
trace: fix security issues
After getting a report of 3.2.3's xenmon crashing Xen (as it turned out this was because c/s 17000 was backported to that tree without also applying c/s 17515), I figured that the hypervisor shouldn't rely on any specific state of the actual trace buffer (as it is shared writable with Dom0) [GWD: Volatile quantifiers have been taken out and moved to another patch] To make clear what purpose specific variables have and/or where they got loaded from, the patch also changes the type of some of them to be explicitly u32/s32, and removes pointless assertions (like checking an unsigned variable to be >= 0). I also took the prototype adjustment of __trace_var() as an opportunity to simplify the TRACE_xD() macros. Similar simplification could be done on the (quite numerous) direct callers of the function. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Diffstat (limited to 'xen/include/xen/trace.h')
-rw-r--r--xen/include/xen/trace.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/xen/include/xen/trace.h b/xen/include/xen/trace.h
index 797fb75658..2b7eeff16c 100644
--- a/xen/include/xen/trace.h
+++ b/xen/include/xen/trace.h
@@ -36,7 +36,7 @@ int tb_control(struct xen_sysctl_tbuf_op *tbc);
int trace_will_trace_event(u32 event);
-void __trace_var(u32 event, int cycles, int extra, unsigned char *extra_data);
+void __trace_var(u32 event, bool_t cycles, unsigned int extra, const void *);
static inline void trace_var(u32 event, int cycles, int extra,
unsigned char *extra_data)
@@ -57,7 +57,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
{ \
u32 _d[1]; \
_d[0] = d1; \
- __trace_var(_e, 1, sizeof(*_d), (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
@@ -68,7 +68,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
u32 _d[2]; \
_d[0] = d1; \
_d[1] = d2; \
- __trace_var(_e, 1, sizeof(*_d)*2, (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
@@ -80,7 +80,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
_d[0] = d1; \
_d[1] = d2; \
_d[2] = d3; \
- __trace_var(_e, 1, sizeof(*_d)*3, (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
@@ -93,7 +93,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
_d[1] = d2; \
_d[2] = d3; \
_d[3] = d4; \
- __trace_var(_e, 1, sizeof(*_d)*4, (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
@@ -107,7 +107,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
_d[2] = d3; \
_d[3] = d4; \
_d[4] = d5; \
- __trace_var(_e, 1, sizeof(*_d)*5, (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
@@ -122,7 +122,7 @@ static inline void trace_var(u32 event, int cycles, int extra,
_d[3] = d4; \
_d[4] = d5; \
_d[5] = d6; \
- __trace_var(_e, 1, sizeof(*_d)*6, (unsigned char *)_d); \
+ __trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )