xenfb: fix potential memory leak
Subsystems (2)
PATCH 1/1 xenfb: fix potential memory leak
Hi,
This patch fix potential memory leak when xenfb connect backend failed. Thanks for Ian's review and comments.
Signed-off-by Joe Jin <[email protected]>
Tested-by Gurudas Pai <[email protected]>
Acked-by Ian Campbell <[email protected]>
Cc Jeremy Fitzhardinge <[email protected]>
Cc Konrad Rzeszutek Wilk <[email protected]>
Cc Andrew Morton <[email protected]>
--- xen-fbfront.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/video/xen-fbfront.c +9 -8
@@ -561,26 +561,24 @@ static void xenfb_init_shared_page(struct xenfb_info *info,static int xenfb_connect_backend (struct xenbus_device *dev,struct xenfb_info *info) { -int ret, evtchn; +int ret, evtchn, irq;struct xenbus_transaction xbt; ret =xenbus_alloc_evtchn (dev, &evtchn);if (ret)return ret; - ret =bind_evtchn_to_irqhandler (evtchn, xenfb_event_handler, + irq =bind_evtchn_to_irqhandler (evtchn, xenfb_event_handler,0 , dev->devicetype, info); -if (ret <0 ) { +if (irq <0 ) {xenbus_free_evtchn (dev, evtchn);xenbus_dev_fatal (dev, ret,"bind_evtchn_to_irqhandler" ); -return ret; +return irq; } - info->irq = ret; - again: ret =xenbus_transaction_start (&xbt);if (ret) {xenbus_dev_fatal (dev, ret,"starting transaction" ); -return ret; + goto unbind_irq; } ret =xenbus_printf (xbt, dev->nodename,"page-ref" ,"%lu" ,virt_to_mfn (info->page));
@@ -602,15 +600,18 @@ static int xenfb_connect_backend(struct xenbus_device *dev,if (ret = -EAGAIN ) goto again;xenbus_dev_fatal (dev, ret,"completing transaction" ); -return ret; + goto unbind_irq; }xenbus_switch_state (dev, XenbusStateInitialised); + info->irq = irq;return 0 ; error_xenbus:xenbus_transaction_end (xbt,1 );xenbus_dev_fatal (dev, ret,"writing xenstore" ); + unbind_irq: +unbind_from_irqhandler (irq, info);return ret; }