mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 11:52:20 +00:00
libxl: Fix possible invalid read
According to the following valgrind output, there seems to be a invalid limit for the iterator (captured on Fedora 19): ==3945== Invalid read of size 1 ==3945== at 0x1E1FA410: libxlVmStart (libxl_driver.c:475) ==3945== by 0x1E1FAD9A: libxlDomainCreateWithFlags (libxl_driver.c:2633) ==3945== by 0x5187D46: virDomainCreate (libvirt.c:9439) ==3945== by 0x13BAA6: remoteDispatchDomainCreateHelper (remote_dispatch.h:2910) ==3945== by 0x51DE5B9: virNetServerProgramDispatch (virnetserverprogram.c:435) ==3945== by 0x51D93E7: virNetServerHandleJob (virnetserver.c:165) ==3945== by 0x50F5BF4: virThreadPoolWorker (virthreadpool.c:144) ==3945== by 0x50F5670: virThreadHelper (virthreadpthread.c:161) ==3945== by 0x8046C52: start_thread (pthread_create.c:308) ==3945== by 0x8758E1C: clone (clone.S:113) ==3945== Address 0x23424d81 is 0 bytes after a block of size 1 alloc'd ==3945== at 0x4A08121: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==3945== by 0x50B1F8C: virAllocN (viralloc.c:189) ==3945== by 0x1E1FA3CA: libxlVmStart (libxl_driver.c:468) ==3945== by 0x1E1FAD9A: libxlDomainCreateWithFlags (libxl_driver.c:2633) ==3945== by 0x5187D46: virDomainCreate (libvirt.c:9439) ==3945== by 0x13BAA6: remoteDispatchDomainCreateHelper (remote_dispatch.h:2910) ==3945== by 0x51DE5B9: virNetServerProgramDispatch (virnetserverprogram.c:435) ==3945== by 0x51D93E7: virNetServerHandleJob (virnetserver.c:165) ==3945== by 0x50F5BF4: virThreadPoolWorker (virthreadpool.c:144) ==3945== by 0x50F5670: virThreadHelper (virthreadpthread.c:161) ==3945== by 0x8046C52: start_thread (pthread_create.c:308) ==3945== by 0x8758E1C: clone (clone.S:113) ==3945== Related: https://bugzilla.redhat.com/show_bug.cgi?id=1013045 Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
0410eb22bf
commit
394d6e0a95
@ -454,6 +454,7 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm)
|
|||||||
size_t cpumaplen;
|
size_t cpumaplen;
|
||||||
int vcpu;
|
int vcpu;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
size_t limit;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
if (libxlDoNodeGetInfo(driver, &nodeinfo) < 0)
|
if (libxlDoNodeGetInfo(driver, &nodeinfo) < 0)
|
||||||
@ -470,7 +471,8 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm)
|
|||||||
|
|
||||||
cpumask = (uint8_t*) def->cputune.vcpupin[vcpu]->cpumask;
|
cpumask = (uint8_t*) def->cputune.vcpupin[vcpu]->cpumask;
|
||||||
|
|
||||||
for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; ++i) {
|
limit = MIN(VIR_DOMAIN_CPUMASK_LEN, cpumaplen);
|
||||||
|
for (i = 0; i < limit; ++i) {
|
||||||
if (cpumask[i])
|
if (cpumask[i])
|
||||||
VIR_USE_CPU(cpumap, i);
|
VIR_USE_CPU(cpumap, i);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user