]> xenbits.xensource.com Git - xen.git/commitdiff
init-xenstore-domain: cleanup all resources on a single exit path
authorIan Campbell <ian.campbell@citrix.com>
Wed, 10 Feb 2016 16:56:22 +0000 (16:56 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 11 Feb 2016 15:36:15 +0000 (15:36 +0000)
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 <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
tools/helpers/init-xenstore-domain.c

index 5c5af2dc7876276a718e02584db29a142f503bdc..909542b62016a6c8a88c038995e4042b8d1784b2 100644 (file)
@@ -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;
 }