mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 09:17:52 +03:00
qemu_conf: Avoid dereferencing NULL in virQEMUDriverGetHost{NUMACaps,CPU}
When fixing [1] I've ran attached reproducer and had it spawn 1024 threads and query capabilities XML in each one of them. This lead libvirtd to hit the RLIMIT_NOFILE limit which was kind of expected. What wasn't expected was a subsequent segfault. It happened because virCPUProbeHost failed and returned NULL. We've taken the NULL and passed it to virCapabilitiesHostNUMARef() which dereferenced it. Code inspection showed the same flas in virQEMUDriverGetHostNUMACaps(), so I'm fixing both places. 1: https://bugzilla.redhat.com/show_bug.cgi?id=1791790 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
609acf1f5d
commit
cc361a34c5
@ -1201,32 +1201,42 @@ virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver,
|
||||
virCapsHostNUMAPtr
|
||||
virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver)
|
||||
{
|
||||
virCapsHostNUMAPtr hostnuma;
|
||||
|
||||
qemuDriverLock(driver);
|
||||
|
||||
if (!driver->hostnuma)
|
||||
driver->hostnuma = virCapabilitiesHostNUMANewHost();
|
||||
|
||||
hostnuma = driver->hostnuma;
|
||||
|
||||
qemuDriverUnlock(driver);
|
||||
|
||||
virCapabilitiesHostNUMARef(driver->hostnuma);
|
||||
if (hostnuma)
|
||||
virCapabilitiesHostNUMARef(hostnuma);
|
||||
|
||||
return driver->hostnuma;
|
||||
return hostnuma;
|
||||
}
|
||||
|
||||
|
||||
virCPUDefPtr
|
||||
virQEMUDriverGetHostCPU(virQEMUDriverPtr driver)
|
||||
{
|
||||
virCPUDefPtr hostcpu;
|
||||
|
||||
qemuDriverLock(driver);
|
||||
|
||||
if (!driver->hostcpu)
|
||||
driver->hostcpu = virCPUProbeHost(virArchFromHost());
|
||||
|
||||
hostcpu = driver->hostcpu;
|
||||
|
||||
qemuDriverUnlock(driver);
|
||||
|
||||
virCPUDefRef(driver->hostcpu);
|
||||
if (hostcpu)
|
||||
virCPUDefRef(hostcpu);
|
||||
|
||||
return driver->hostcpu;
|
||||
return hostcpu;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user