[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] xc Python ext lib: Xen 4.6 Unable to start a 2T guest without OverflowError

Starting a vm with memory over 2T resulted in an overflow error.

memory = 2097152 defined as number of megabytes returns the error
"OverflowError: signed integer is greater than maximum"

The error is the result of the python extension argument translator
defining max_memkb as a signed int instead of an unsigned int.
So PyArg_ParseTuple(args, "ii", &dom, &maxmem_kb) overflowed by one with
2147483648 kb.

The other issue is that max_memkb is defined as uint64_t in the subsequent
domctl target api so the xc lib and its python C extension should use uint64_t 
as well.

/* XEN_DOMCTL_max_mem */
struct xen_domctl_max_mem {
    /* IN variables. */
    uint64_aligned_t max_memkb;

Signed-off-by: Cathy Avery <cathy.avery@xxxxxxxxxx>
 tools/libxc/include/xenctrl.h     |    2 +-
 tools/libxc/xc_domain.c           |    2 +-
 tools/python/xen/lowlevel/xc/xc.c |    4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 0ad8b8d..1b5c622 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1253,7 +1253,7 @@ int xc_getcpuinfo(xc_interface *xch, int max_cpus,
 int xc_domain_setmaxmem(xc_interface *xch,
                         uint32_t domid,
-                        unsigned int max_memkb);
+                        uint64_t max_memkb);
 int xc_domain_set_memmap_limit(xc_interface *xch,
                                uint32_t domid,
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index b864872..2c0fc9f 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -630,7 +630,7 @@ int xc_shadow_control(xc_interface *xch,
 int xc_domain_setmaxmem(xc_interface *xch,
                         uint32_t domid,
-                        unsigned int max_memkb)
+                        uint64_t max_memkb)
     domctl.cmd = XEN_DOMCTL_max_mem;
diff --git a/tools/python/xen/lowlevel/xc/xc.c 
index f83e33d..7a5d36e 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -1658,9 +1658,9 @@ static PyObject *pyxc_sched_credit2_domain_get(XcObject 
*self, PyObject *args)
 static PyObject *pyxc_domain_setmaxmem(XcObject *self, PyObject *args)
     uint32_t dom;
-    unsigned int maxmem_kb;
+    uint64_t maxmem_kb;
-    if (!PyArg_ParseTuple(args, "ii", &dom, &maxmem_kb))
+    if (!PyArg_ParseTuple(args, "ik", &dom, &maxmem_kb))
         return NULL;
     if (xc_domain_setmaxmem(self->xc_handle, dom, maxmem_kb) != 0)

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.