From: Jeremy Fitzhardinge Date: Wed, 30 Oct 2013 17:38:08 +0000 (-0700) Subject: libxl: fix dubious cpumask handling in libxlDomainSetVcpuAffinities X-Git-Tag: v1.0.5.8~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e51fa6486d82c2f2c6a98c1c11bf93dfbaaf75f3;p=thirdparty%2Flibvirt.git libxl: fix dubious cpumask handling in libxlDomainSetVcpuAffinities Rather than casting the virBitmap pointer to uint8_t* and then using the structure contents as a byte array, use the virBitmap API to determine the bitmap size and test each bit. Signed-off-by: Jeremy Fitzhardinge (cherry picked from commit ba1bf10063a0205c1de12b209b0282833710214f) --- diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index adaec75579..f47aceb43e 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -808,7 +808,7 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm) libxlDomainObjPrivatePtr priv = vm->privateData; virDomainDefPtr def = vm->def; libxl_bitmap map; - uint8_t *cpumask = NULL; + virBitmapPtr cpumask = NULL; uint8_t *cpumap = NULL; virNodeInfo nodeinfo; size_t cpumaplen; @@ -829,10 +829,12 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm) goto cleanup; } - cpumask = (uint8_t*) def->cputune.vcpupin[vcpu]->cpumask; + cpumask = def->cputune.vcpupin[vcpu]->cpumask; - for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; ++i) { - if (cpumask[i]) + for (i = 0; i < virBitmapSize(cpumask); ++i) { + bool bit; + ignore_value(virBitmapGetBit(cpumask, i, &bit)); + if (bit) VIR_USE_CPU(cpumap, i); }