]> xenbits.xensource.com Git - people/julieng/xen-unstable.git/commitdiff
libxc: do proper return code checking of allocator in domain builder
authorJuergen Gross <jgross@suse.com>
Tue, 1 Dec 2015 17:14:54 +0000 (18:14 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 2 Dec 2015 15:27:38 +0000 (15:27 +0000)
Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
tools/libxc/xc_dom_core.c
tools/libxc/xc_dom_x86.c

index d0c65963dc549bcea4f3e56364b4a2ec5e077f70..841e7dc355a2eaebb948a804f6288cdaee2504ea 100644 (file)
@@ -630,7 +630,7 @@ xen_pfn_t xc_dom_alloc_page(struct xc_dom_image *dom, char *name)
     pfn = dom->pfn_alloc_end - dom->rambase_pfn;
 
     if ( xc_dom_chk_alloc_pages(dom, name, 1) )
-        return (xen_pfn_t)-1;
+        return INVALID_PFN;
 
     DOMPRINTF("%-20s:   %-12s : 0x%" PRIx64 " (pfn 0x%" PRIpfn ")",
               __FUNCTION__, name, start, pfn);
@@ -1107,7 +1107,12 @@ int xc_dom_build_image(struct xc_dom_image *dom)
     if ( dom->arch_hooks->alloc_pgtables(dom) != 0 )
         goto err;
     if ( dom->alloc_bootstack )
+    {
         dom->bootstack_pfn = xc_dom_alloc_page(dom, "boot stack");
+        if ( dom->bootstack_pfn == INVALID_PFN )
+            goto err;
+    }
+
     DOMPRINTF("%-20s: virt_alloc_end : 0x%" PRIx64 "",
               __FUNCTION__, dom->virt_alloc_end);
     DOMPRINTF("%-20s: virt_pgtab_end : 0x%" PRIx64 "",
index 7c77e69b88cfbce2c9237591e77e3bedb4c7250b..71b042ec90b1e6094b9d097d34bb807c8b94facb 100644 (file)
@@ -537,10 +537,20 @@ static int alloc_magic_pages(struct xc_dom_image *dom)
 {
     /* allocate special pages */
     dom->start_info_pfn = xc_dom_alloc_page(dom, "start info");
+    if ( dom->start_info_pfn == INVALID_PFN )
+        return -1;
     dom->xenstore_pfn = xc_dom_alloc_page(dom, "xenstore");
+    if ( dom->xenstore_pfn == INVALID_PFN )
+        return -1;
     dom->console_pfn = xc_dom_alloc_page(dom, "console");
+    if ( dom->console_pfn == INVALID_PFN )
+        return -1;
     if ( xc_dom_feature_translated(dom) )
+    {
         dom->shared_info_pfn = xc_dom_alloc_page(dom, "shared info");
+        if ( dom->shared_info_pfn == INVALID_PFN )
+            return -1;
+    }
     dom->alloc_bootstack = 1;
 
     return 0;