mirror of
https://github.com/qemu/qemu.git
synced 2025-08-08 08:05:17 +00:00
virtio-net: fix wild pointer when remove virtio-net queues
The tx_bh or tx_timer will free in virtio_net_del_queue() function, when removing virtio-net queues if the guest doesn't support multiqueue. But it might be still referenced by virtio_net_set_status(), which needs to be set NULL. And also the tx_waiting needs to be set zero to prevent virtio_net_set_status() accessing tx_bh or tx_timer. Cc: qemu-stable@nongnu.org Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
f5ab20a468
commit
f989c30cf8
@ -1522,9 +1522,12 @@ static void virtio_net_del_queue(VirtIONet *n, int index)
|
|||||||
if (q->tx_timer) {
|
if (q->tx_timer) {
|
||||||
timer_del(q->tx_timer);
|
timer_del(q->tx_timer);
|
||||||
timer_free(q->tx_timer);
|
timer_free(q->tx_timer);
|
||||||
|
q->tx_timer = NULL;
|
||||||
} else {
|
} else {
|
||||||
qemu_bh_delete(q->tx_bh);
|
qemu_bh_delete(q->tx_bh);
|
||||||
|
q->tx_bh = NULL;
|
||||||
}
|
}
|
||||||
|
q->tx_waiting = 0;
|
||||||
virtio_del_queue(vdev, index * 2 + 1);
|
virtio_del_queue(vdev, index * 2 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user