virtio-net: don't touch virtqueue if vm is stopped
commit70e53e6e4da3db4b2c31981191753a7e974936d0
authorJason Wang <jasowang@redhat.com>
Wed, 22 Nov 2017 09:57:19 +0000 (22 17:57 +0800)
committerJason Wang <jasowang@redhat.com>
Tue, 28 Nov 2017 03:54:50 +0000 (28 11:54 +0800)
treeea461d611a699fd39e5fc24887769871f4bcd107
parent5e19aed59ab48ca3c7f1e2da203eed27b91bef2d
virtio-net: don't touch virtqueue if vm is stopped

Guest state should not be touched if VM is stopped, unfortunately we
didn't check running state and tried to drain tx queue unconditionally
in virtio_net_set_status(). A crash was then noticed as a migration
destination when user type quit after virtqueue state is loaded but
before region cache is initialized. In this case,
virtio_net_drop_tx_queue_data() tries to access the uninitialized
region cache.

Fix this by only dropping tx queue data when vm is running.

Fixes: 283e2c2adcb80 ("net: virtio-net discards TX data after link down")
Cc: Yuri Benditovich <yuri.benditovich@daynix.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: qemu-stable@nongnu.org
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/virtio-net.c