]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
virtio-pci: Check if is_avq is NULL
authorLi Zhang <zhanglikernel@gmail.com>
Sat, 16 Mar 2024 05:25:54 +0000 (13:25 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 22 May 2024 12:39:41 +0000 (08:39 -0400)
[bug]
In the virtio_pci_common.c function vp_del_vqs, vp_dev->is_avq is involved
to determine whether it is admin virtqueue, but this function vp_dev->is_avq
 may be empty. For installations, virtio_pci_legacy does not assign a value
 to vp_dev->is_avq.

[fix]
Check whether it is vp_dev->is_avq before use.

[test]
Test with virsh Attach device
Before this patch, the following command would crash the guest system

After applying the patch, everything seems to be working fine.

Signed-off-by: Li Zhang <zhanglikernel@gmail.com>
Message-Id: <1710566754-3532-1-git-send-email-zhanglikernel@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio_pci_common.c

index 584af7816532b39d77a488befd94227b5626511f..f6b0b00e4599f4e2d88e8429212f6f62f265c660 100644 (file)
@@ -236,7 +236,7 @@ void vp_del_vqs(struct virtio_device *vdev)
        int i;
 
        list_for_each_entry_safe(vq, n, &vdev->vqs, list) {
-               if (vp_dev->is_avq(vdev, vq->index))
+               if (vp_dev->is_avq && vp_dev->is_avq(vdev, vq->index))
                        continue;
 
                if (vp_dev->per_vq_vectors) {