hw/pci-bridge: Fix invalid free()

When loadvm'ing a *running* snapshot qemu crashes due to an invalid
free. It's fortunately caught early by glibc heap memory corruption
protection and qemu gets killed with SIGABRT.

Steps to reproduce:

1) Create VM (e.g w/ virsh define)
2) Start the VM and take a snapshot while it's running and having a
   PCI bridge attached
3) Destroy the VM and revert the running snapshot.

This commit fixes the issue.

Signed-off-by: Matthias Weckbecker <matthias@weckbecker.name>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Matthias Weckbecker 2018-12-10 14:00:48 +01:00 committed by Michael S. Tsirkin
parent a2eb5c0cf7
commit e7176cdbe4

View File

@ -241,9 +241,9 @@ void pci_bridge_update_mappings(PCIBridge *br)
* while another accesses an unaffected region. */ * while another accesses an unaffected region. */
memory_region_transaction_begin(); memory_region_transaction_begin();
pci_bridge_region_del(br, br->windows); pci_bridge_region_del(br, br->windows);
pci_bridge_region_cleanup(br, w);
br->windows = pci_bridge_region_init(br); br->windows = pci_bridge_region_init(br);
memory_region_transaction_commit(); memory_region_transaction_commit();
pci_bridge_region_cleanup(br, w);
} }
/* default write_config function for PCI-to-PCI bridge */ /* default write_config function for PCI-to-PCI bridge */