aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/irq.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-03-26 09:42:01 +0000
committerKeir Fraser <keir@xen.org>2011-03-26 09:42:01 +0000
commit4d21248c007f0b688d41d9282e69e0d6cbde3ece (patch)
treeab433fc1782742a33bcc588a824883fb0d58b6ba /xen/arch/x86/irq.c
parenta3bb65086b8bebd7f7d3c5f7bbb8885647850cf5 (diff)
downloadxen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.tar.gz
xen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.tar.bz2
xen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.zip
x86: __pirq_guest_eoi() must check it is called for a fully
guest-bound irq before accessing desc->action. Signed-off-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/irq.c')
-rw-r--r--xen/arch/x86/irq.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index 3595ef5271..ab2e6c9993 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -1022,6 +1022,12 @@ static void __pirq_guest_eoi(struct domain *d, int pirq)
if ( desc == NULL )
return;
+ if ( !(desc->status & IRQ_GUEST) )
+ {
+ spin_unlock_irq(&desc->lock);
+ return;
+ }
+
action = (irq_guest_action_t *)desc->action;
irq = desc - irq_desc;