• P
    virtio-pci: fix MSI memory region use after free · 8b81bb3b
    Paolo Bonzini 提交于
    After memory region QOMification QEMU is stricter in detecting
    wrong usage of the memory region API.  Here it detected a
    memory_region_destroy done before the corresponding
    memory_region_del_subregion; the memory_region_destroy is
    done by msix_uninit_exclusive_bar, the memory_region_del_subregion
    is done by the PCI core's pci_unregister_io_regions before
    pc->exit is called.
    
    The problem was introduced by
    commit 06a13073
        virtio-pci: add device_unplugged callback
    As noted in that commit log, virtio device kick callbacks need to be
    stopped before generic virtio is cleaned up. This is because these are
    notifications from pci proxy to the generic virtio device so they need
    to be stopped in the unplug call before the virtio device is unrealized.
    However interrupts are notifications from the virtio device to
    the pci proxy so they need to stay around while the device
    is realized.
    
    The memory API misuse caused an assertion when hot-unplugging virtio
    devices.  Using the API correctly fixes the assertion.
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    8b81bb3b
virtio-pci.c 50.8 KB