From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH 3 of 4] xentrace: reduce size of extradata in trace_irq_mask() Date: Fri, 15 Jul 2011 17:28:03 +0100 Message-ID: <1310747283.448.90.camel@elijah> References: <6e4aef7b5051e18f19f2.1310744287@probook.site> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <6e4aef7b5051e18f19f2.1310744287@probook.site> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Olaf Hering Cc: George Dunlap , "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org Acked-by: George Dunlap On Fri, 2011-07-15 at 16:38 +0100, Olaf Hering wrote: > # HG changeset patch > # User Olaf Hering > # Date 1310743144 -7200 > # Node ID 6e4aef7b5051e18f19f2367a4439bba8f495335c > # Parent e0ff4eea0432e0af3210e090a47414a0126e9904 > 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) [] __trace_var+0x4d/0x3b8 > (XEN) [] trace_irq_mask+0x49/0x4b > (XEN) [] __assign_irq_vector+0x241/0x374 > (XEN) [] set_desc_affinity+0x5d/0xd4 > (XEN) [] set_msi_affinity+0x44/0x1c1 > (XEN) [] move_masked_irq+0x9c/0xcd > (XEN) [] move_native_irq+0x3e/0x53 > (XEN) [] ack_msi_irq+0x2c/0x6e > (XEN) [] do_IRQ+0x16f/0x66d > > Signed-off-by: Olaf Hering > > diff -r e0ff4eea0432 -r 6e4aef7b5051 xen/arch/x86/irq.c > --- 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)