From a4eb6108908c65559d4b3997949fb41f0b2828a5 Mon Sep 17 00:00:00 2001 From: Don Slutz Date: Thu, 31 Oct 2013 11:31:06 -0400 Subject: [PATCH 2/2] kexec: Skip checking of info->backup_src_start & info->backup_src_size. Signed-off-by: Don Slutz --- xen/common/kimage.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/xen/common/kimage.c b/xen/common/kimage.c index f2b331e..92c6ebf 100644 --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -124,6 +124,9 @@ static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, { paddr_t mstart, mend; + if ( guest_handle_is_null(segments[i].buf.h) ) + continue; + mstart = image->segments[i].dest_maddr; mend = mstart + image->segments[i].dest_size; if ( (mstart & ~PAGE_MASK) || (mend & ~PAGE_MASK) ) @@ -142,11 +145,18 @@ static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, paddr_t mstart, mend; unsigned long j; + if ( guest_handle_is_null(segments[i].buf.h) ) + continue; + mstart = image->segments[i].dest_maddr; mend = mstart + image->segments[i].dest_size; for (j = 0; j < i; j++ ) { paddr_t pstart, pend; + + if ( guest_handle_is_null(segments[i].buf.h) ) + continue; + pstart = image->segments[j].dest_maddr; pend = pstart + image->segments[j].dest_size; /* Do the segments overlap? */ @@ -163,6 +173,9 @@ static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, result = -EINVAL; for ( i = 0; i < nr_segments; i++ ) { + if ( guest_handle_is_null(segments[i].buf.h) ) + continue; + if ( image->segments[i].buf_size > image->segments[i].dest_size ) goto out; } -- 1.7.11.7