• Michael S. Tsirkin's avatar
    virtio-pci: make reset operation safer · e6af578c
    Michael S. Tsirkin authored
    virtio pci device reset actually just does an I/O
    write, which in PCI is really posted, that is it
    can complete on CPU before the device has received it.
    
    Further, interrupts might have been pending on
    another CPU, so device callback might get invoked after reset.
    
    This conflicts with how drivers use reset, which is typically:
    	reset
    	unregister
    a callback running after reset completed can race with
    unregister, potentially leading to use after free bugs.
    
    Fix by flushing out the write, and flushing pending interrupts.
    
    This assumes that device is never reset from
    its vq/config callbacks, or in parallel with being
    added/removed, document this assumption.
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    e6af578c
virtio_pci.c 19.8 KB