[Libvir] [patch] virsh setvcpus range check for negative value case
Daniel Veillard
veillard at redhat.com
Wed Aug 15 10:19:22 UTC 2007
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