[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH 2/2] libxc: Check there's enough memory for segments
# HG changeset patch # User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> # Date 1265131163 0 # Node ID aeb8a70f42a5cc2cc7b076d128fa446201a79103 # Parent 5fc5ee3e3530d38a21d00b4ec2d559b47a23cf07 libxc: Check there's enough memory for segments we're creating Previously, xc_dom_alloc_segment would go ahead even if the segment we're trying to create is too big for the domain's RAM (or the requested addr is out of range). It would pass invalid parameters to xc_dom_seg_to_ptr giving undefined behaviour. Fixing xc_dom_seg_to_ptr to fail is not sufficient because we want to provide a comprehensible explanation to the caller - which may ultimately be the user. In particular, with this change attempting "xl create" with a ramdisk image bigger than the guest's specified RAM will provide a useful error message mentioning the ramdisk. Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> diff -r 5fc5ee3e3530 -r aeb8a70f42a5 tools/libxc/xc_dom_core.c --- a/tools/libxc/xc_dom_core.c Tue Feb 02 17:16:07 2010 +0000 +++ b/tools/libxc/xc_dom_core.c Tue Feb 02 17:19:23 2010 +0000 @@ -409,8 +409,19 @@ } seg->vstart = start; + seg->pfn = (seg->vstart - dom->parms.virt_base) / page_size; + + if ( pages > dom->total_pages || /* double test avoids overflow probs */ + pages > dom->total_pages - seg->pfn) + { + xc_dom_panic(XC_OUT_OF_MEMORY, + "%s: segment %s too large (0x%"PRIpfn" > " + "0x%"PRIpfn" - 0x%"PRIpfn" pages)\n", + __FUNCTION__, name, pages, dom->total_pages, seg->pfn); + return -1; + } + seg->vend = start + pages * page_size; - seg->pfn = (seg->vstart - dom->parms.virt_base) / page_size; dom->virt_alloc_end = seg->vend; if (dom->allocate) dom->allocate(dom, dom->virt_alloc_end); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |