vhost-user-base: free virtqueue array during cleanup
vhost-user-base stores the VirtQueue pointers in a GPtrArray, but its
cleanup helper only deletes the VirtQueues and leaves the array itself
allocated.
Free the GPtrArray after deleting the queues and clear the pointer so
cleanup remains safe if the error path reaches it with no queues to
release.
Fixes: 6275989647 (virtio: split into vhost-user-base and vhost-user-device)
Signed-off-by: GuoHan Zhao <zhaoguohan@kylinos.cn>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-ID: <20260629092619.2607275-1-zhaoguohan@kylinos.cn>
This commit is contained in:
committed by
Michael S. Tsirkin
parent
a3fbd2b524
commit
ed963d3967
@@ -193,9 +193,13 @@ static void do_vhost_user_cleanup(VirtIODevice *vdev, VHostUserBase *vub)
|
||||
{
|
||||
vhost_user_cleanup(&vub->vhost_user);
|
||||
|
||||
for (int i = 0; i < vub->num_vqs; i++) {
|
||||
VirtQueue *vq = g_ptr_array_index(vub->vqs, i);
|
||||
virtio_delete_queue(vq);
|
||||
if (vub->vqs) {
|
||||
for (int i = 0; i < vub->num_vqs; i++) {
|
||||
VirtQueue *vq = g_ptr_array_index(vub->vqs, i);
|
||||
virtio_delete_queue(vq);
|
||||
}
|
||||
g_ptr_array_free(vub->vqs, true);
|
||||
vub->vqs = NULL;
|
||||
}
|
||||
|
||||
virtio_cleanup(vdev);
|
||||
|
||||
Reference in New Issue
Block a user