From: Ian Campbell Date: Wed, 10 Feb 2016 16:56:22 +0000 (+0000) Subject: init-xenstore-domain: cleanup all resources on a single exit path X-Git-Tag: 4.7.0-rc1~601 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=f15348afe976d3c5e17fce2d2beb412bbae7475b;p=xen.git init-xenstore-domain: cleanup all resources on a single exit path Previously xs_fd would be left open, which is CID 1055993 (previously partially fixed by 3bca826aae5eb). Instead arrange for both success and error cases to cleanup everything on a single exit path instead of doing partial cleanup on the success path a few operations higher up. Signed-off-by: Ian Campbell Acked-by: Wei Liu --- diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c index 5c5af2dc78..909542b620 100644 --- a/tools/helpers/init-xenstore-domain.c +++ b/tools/helpers/init-xenstore-domain.c @@ -172,9 +172,6 @@ static int build(xc_interface *xch) goto err; } - xc_dom_release(dom); - dom = NULL; - rv = xc_domain_set_virq_handler(xch, domid, VIRQ_DOM_EXC); if ( rv ) { @@ -188,14 +185,18 @@ static int build(xc_interface *xch) goto err; } - return 0; + rv = 0; err: if ( dom ) xc_dom_release(dom); - if ( domid != ~0 ) + if ( xs_fd >= 0 ) + close(xs_fd); + + /* if we failed then destroy the domain */ + if ( rv && domid != ~0 ) xc_domain_destroy(xch, domid); - close(xs_fd); + return rv; }