[Libvir] [patch] virsh setvcpus range check for negative value case
Atsushi SAKAI
sakaia at jp.fujitsu.com
Wed Aug 15 10:59:40 UTC 2007
Hi, Daniel
Thank you for your reviewing.
I agree your fixes.
Also I agree this issue should be handled by hypervisor.
But for Xen, if # of vcpus are out of range,
XEN_DOMCTL_setvcpu_context return the -EINVAL.
So the inactive domain cannot boot.
For this circumstances,
it is better to handle # of vcpus error by libvirt.
c.f.
Then I go to Next Bug fixes.
Thanks
Atsushi SAKAI
Daniel Veillard <veillard at redhat.com> wrote:
> On Wed, Aug 15, 2007 at 05:01:04PM +0900, Atsushi SAKAI wrote:
> > Hi,
> >
> > This patch adds virsh setvcpus range check for negative value case.
> >
> > for example
> > to the inactive domain
> > virsh setvcpus -1
> > sets vcpus=4294967295
> > And cannot boot the inactive domain.
>
> I would rather change the test
>
> if (!count) {
>
> to
>
> if (count <= 0) {
>
> rather than use the unsigned cast to catch it.
>
> There is 2 things to note:
> - virDomainSetVcpus actually do a check but since the argument is an
> unsigned int we have a problem
> if (nvcpus < 1) {
> virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
> return (-1);
> }
> I would be tempted to do an (internal ?)
> #define MAX_VCPUS 4096
> and change that check to
> if ((nvcpus < 1) || (nvcpus > MAX_VCPUS)) {
> to guard at the API against unreasonnable values.
>
> - There is actually a bug a few lines down in virsh, when checking for the
> maximum number of CPUs for the domain:
> maxcpu = virDomainGetMaxVcpus(dom);
> if (!maxcpu) {
> as -1 is the error values for the call. so the test there really ought to be
> if (maxcpu <= 0)
> one could argue that 0 should be the error value returned by
> virDomainGetMaxVcpus but since it's defined as -1 in the API, the test
> must be fixed.
>
> I have made the 2 changes to virsh but not the one to virDomainSetVcpus
> where it could be argued it's the hypervisor responsability to check the
> given value. Opinions ?
>
> Thanks for raising the problem !
>
> Daniel
>
> --
> Red Hat Virtualization group http://redhat.com/virtualization/
> Daniel Veillard | virtualization library http://libvirt.org/
> veillard at redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
> http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
More information about the libvir-list
mailing list