[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 03/13] xen: fix evtchn_unbind_from_user
On 31/01/13 14:46, Wei Liu wrote: > It is possible the port was allocated but the irq was not. Take care of this > case. I think the port should be closed when the evtchn_bind_to_user() fails otherwise the evtchn driver is leaving the event channel in an inconsistent state. David > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > --- > drivers/xen/evtchn.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c > index b1f60a0..d2bbea1 100644 > --- a/drivers/xen/evtchn.c > +++ b/drivers/xen/evtchn.c > @@ -277,7 +277,17 @@ static void evtchn_unbind_from_user(struct per_user_data > *u, int port) > { > int irq = irq_from_evtchn(port); > > - unbind_from_irqhandler(irq, (void *)(unsigned long)port); > + /* It is possible that the port was allocated but the irq was > + * not */ > + if (irq >= 0) { > + unbind_from_irqhandler(irq, (void *)(unsigned long)port); > + } else { > + struct evtchn_close close; > + close.port = port; > + if (port != 0 && /* port 0 is never used */ > + HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0) > + BUG(); > + } > > set_port_user(port, NULL); > } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |