aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/event_channel.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-12-24 12:14:09 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-12-24 12:14:09 +0000
commit27062e851f0ac848d4ec5f2dc939bfad8e93082b (patch)
tree70676dc44761d9ece1d4574699cf0f2f42ca5668 /xen/common/event_channel.c
parent37fddaa5fe1a7e369827e4b9e25cdae5df9b3d7d (diff)
downloadxen-27062e851f0ac848d4ec5f2dc939bfad8e93082b.tar.gz
xen-27062e851f0ac848d4ec5f2dc939bfad8e93082b.tar.bz2
xen-27062e851f0ac848d4ec5f2dc939bfad8e93082b.zip
evtchn: Do not free d->poll_mask until domain is being deallocated.
Avoids crash on dereference of poll_mask after domain_kill(). Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/common/event_channel.c')
-rw-r--r--xen/common/event_channel.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index d052f15980..29c515cf0c 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1052,13 +1052,18 @@ void evtchn_destroy(struct domain *d)
d->evtchn[i] = NULL;
}
spin_unlock(&d->event_lock);
+}
+
+void evtchn_destroy_final(struct domain *d)
+{
#if MAX_VIRT_CPUS > BITS_PER_LONG
xfree(d->poll_mask);
d->poll_mask = NULL;
#endif
}
+
static void domain_dump_evtchn_info(struct domain *d)
{
unsigned int port;