]> xenbits.xensource.com Git - xen.git/commitdiff
libxc: remove stale error check for domain size in xc_sr_save_x86_hvm.c
authorJuergen Gross <jgross@suse.com>
Tue, 26 Sep 2017 12:02:56 +0000 (14:02 +0200)
committerWei Liu <wei.liu2@citrix.com>
Fri, 27 Oct 2017 11:03:04 +0000 (12:03 +0100)
Long ago domains to be saved were limited to 1TB size due to the
migration stream v1 limitations which used a 32 bit value for the
PFN and the frame type (4 bits) leaving only 28 bits for the PFN.

Migration stream V2 uses a 64 bit value for this purpose, so there
is no need to refuse saving (or migrating) domains larger than 1 TB.

For 32 bit toolstacks there is still a size limit, as domains larger
than about 1TB will lead to an exhausted virtual address space of the
saving process. So keep the test for 32 bit, but don't base it on the
page type macros. As a migration could lead to the situation where a
32 bit toolstack would have to handle such a large domain (in case the
sending side is 64 bit) the same test should be added for restoring a
domain.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Release-acked-by: Julien Grall <julien.grall@linaro.org>
tools/libxc/xc_sr_restore_x86_hvm.c
tools/libxc/xc_sr_save_x86_hvm.c

index 1dca85354a144377c3afd86f34f29c7904bb9ab8..227c48553e6b81314d003a1cfb96b01adfc278a3 100644 (file)
@@ -148,6 +148,15 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
               ctx->restore.guest_page_size);
         return -1;
     }
+#ifdef __i386__
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( ctx->restore.p2m_size > 0x0fffffff )
+    {
+        errno = E2BIG;
+        PERROR("Cannot restore this big a guest");
+        return -1;
+    }
+#endif
 
     return 0;
 }
index e17bb5914612bce2453af6cd19f7d0db7cdae230..97a8c49807f192c47209525f51e4d79a50c66cec 100644 (file)
@@ -148,12 +148,15 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
         PERROR("Unable to obtain the guest p2m size");
         return -1;
     }
-    if ( nr_pfns > ~XEN_DOMCTL_PFINFO_LTAB_MASK )
+#ifdef __i386__
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( nr_pfns > 0x0fffffff )
     {
         errno = E2BIG;
         PERROR("Cannot save this big a guest");
         return -1;
     }
+#endif
 
     ctx->save.p2m_size = nr_pfns;