aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlaf Hering <olaf@aepfle.de>2011-07-16 09:24:43 +0100
committerOlaf Hering <olaf@aepfle.de>2011-07-16 09:24:43 +0100
commita544c9814547a07c980fece60371f4d623929aee (patch)
treeec55ffac8b931b8cb0872020fdcee555e414f45f
parent0db0eddfe440fe6bf96537adc213864cf1782bc7 (diff)
downloadxen-a544c9814547a07c980fece60371f4d623929aee.tar.gz
xen-a544c9814547a07c980fece60371f4d623929aee.tar.bz2
xen-a544c9814547a07c980fece60371f4d623929aee.zip
xentrace: reduce size of extradata in trace_irq_mask()
Reduce size of extra_data in to avoid possible crash in trace_var. (XEN) Assertion 'extra_word <= TRACE_EXTRA_MAX' failed at trace.c:687 (XEN) Xen call trace: (XEN) [<ffff82c480128783>] __trace_var+0x4d/0x3b8 (XEN) [<ffff82c480162172>] trace_irq_mask+0x49/0x4b (XEN) [<ffff82c4801631ae>] __assign_irq_vector+0x241/0x374 (XEN) [<ffff82c48015d813>] set_desc_affinity+0x5d/0xd4 (XEN) [<ffff82c480160708>] set_msi_affinity+0x44/0x1c1 (XEN) [<ffff82c480162938>] move_masked_irq+0x9c/0xcd (XEN) [<ffff82c4801629a7>] move_native_irq+0x3e/0x53 (XEN) [<ffff82c48015d969>] ack_msi_irq+0x2c/0x6e (XEN) [<ffff82c4801622e3>] do_IRQ+0x16f/0x66d Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
-rw-r--r--xen/arch/x86/irq.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index c89a3c43c2..7c5a8b6404 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -77,10 +77,14 @@ void unlock_vector_lock(void)
static void trace_irq_mask(u32 event, int irq, int vector, cpumask_t *mask)
{
struct {
- int irq, vec;
- cpumask_t mask;
- } d = { irq, vector, *mask };
- trace_var(event, 1, sizeof(d), (unsigned char *)&d);
+ unsigned int irq:16, vec:16;
+ unsigned int mask[6];
+ } d;
+ d.irq = irq;
+ d.vec = vector;
+ memset(d.mask, 0, sizeof(d.mask));
+ memcpy(d.mask, mask, min(sizeof(d.mask), sizeof(cpumask_t)));
+ trace_var(event, 1, sizeof(d), &d);
}
static int __init __bind_irq_vector(int irq, int vector, cpumask_t cpu_mask)