mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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 <jeremy@goop.org>
(cherry picked from commit ba1bf10063)
This commit is contained in:
committed by
Cole Robinson
parent
9265a89ae8
commit
e51fa6486d
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user