From: Juergen Gross Date: Tue, 1 Dec 2015 17:14:54 +0000 (+0100) Subject: libxc: do proper return code checking of allocator in domain builder X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~2136 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=fc4ac9284dc93922369084a5c73751658c802ae9;p=xen.git libxc: do proper return code checking of allocator in domain builder Signed-off-by: Juergen Gross Acked-by: Wei Liu --- diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index d0c65963dc..841e7dc355 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -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 "", diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index 7c77e69b88..71b042ec90 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -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;