mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
Fix a crash when restarting libvirtd.
If you shutdown libvirtd while a domain with PCI devices is running, then try to restart libvirtd, libvirtd will crash. This happens because qemuUpdateActivePciHostdevs() is calling pciDeviceListSteal() with a dev of 0x0 (NULL), and then trying to dereference it. This patch fixes it up so that qemuUpdateActivePciHostdevs() steals the devices after first Get()'ting them, avoiding the crash. Signed-off-by: Chris Lalancette <clalance@redhat.com>
This commit is contained in:
parent
a7d17c6187
commit
7cc5410bfd
@ -2147,6 +2147,7 @@ qemuUpdateActivePciHostdevs(struct qemud_driver *driver,
|
||||
virDomainDefPtr def)
|
||||
{
|
||||
pciDeviceList *pcidevs;
|
||||
int i;
|
||||
int ret = -1;
|
||||
|
||||
if (!def->nhostdevs)
|
||||
@ -2155,8 +2156,9 @@ qemuUpdateActivePciHostdevs(struct qemud_driver *driver,
|
||||
if (!(pcidevs = qemuGetPciHostDeviceList(NULL, def)))
|
||||
return -1;
|
||||
|
||||
while (pciDeviceListCount(pcidevs) > 0) {
|
||||
pciDevice *dev = pciDeviceListSteal(NULL, pcidevs, 0);
|
||||
for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
|
||||
pciDevice *dev = pciDeviceListGet(pcidevs, i);
|
||||
pciDeviceListSteal(NULL, pcidevs, dev);
|
||||
if (pciDeviceListAdd(NULL,
|
||||
driver->activePciHostdevs,
|
||||
dev) < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user