[libvirt] virDomainGetVcpus error with Fedora 10

Daniel P. Berrange berrange at redhat.com
Thu Mar 12 11:53:34 UTC 2009


On Wed, Mar 11, 2009 at 10:12:16AM -0700, Kaitlin Rupert wrote:
> Daniel P. Berrange wrote:
> >On Fri, Feb 13, 2009 at 03:37:22PM -0800, Kaitlin Rupert wrote:
> >>Hi,
> >>
> >>I'm running Fedora 10 with the following libvirt version:  libvirt-0.6.0-3
> >>
> >>I'm calling virDomainGetVcpus() with the following parameters: 
> >>virDomainGetVcpus(dom, info, max, NULL, 0);  where max = 2 and dom and 
> >>info are both non-NULL.
> >>
> >>However, I'm getting the following error from libvirt: libvir: Domain 
> >>error : invalid argument in virDomainGetVcpus
> >>
> >>I tracked this down, and it's failing the if (cpumaps != NULL && maplen 
> >>< 1) check in libvirt.c because cpumaps is non-NULL.  Which is very 
> >>strange because I'm definitely passing a NULL value.
> >
> >The qemud/remote.c helper for the virDomainGetVcpus method is just 
> >doing a totally bogus calculation/allocation for the cpumaps field.
> >It needs fixing somehow, but I'm not sure how yet
> 
> Any update on this?

I've had another look at it, and believe I have a suitable fix. There were
two problems. 

 - Not allocating a large enough array for the cpumaps field
 - Not respecting a cpumaplen=0, as meaning pass cpumaps=NULL

The latter is what was causing the error message you saw I believe. Can
you try the following patch

Daniel


Index: qemud/remote.c
===================================================================
RCS file: /data/cvs/libvirt/qemud/remote.c,v
retrieving revision 1.64
diff -u -p -r1.64 remote.c
--- qemud/remote.c	3 Mar 2009 09:27:03 -0000	1.64
+++ qemud/remote.c	12 Mar 2009 11:50:58 -0000
@@ -1475,7 +1475,8 @@ remoteDispatchDomainGetVcpus (struct qem
     /* Allocate buffers to take the results. */
     if (VIR_ALLOC_N(info, args->maxinfo) < 0)
         goto oom;
-    if (VIR_ALLOC_N(cpumaps, args->maxinfo) < 0)
+    if (args->maplen > 0 &&
+        VIR_ALLOC_N(cpumaps, args->maxinfo * args->maplen) < 0)
         goto oom;
 
     info_len = virDomainGetVcpus (dom,


-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list