virtio_ring: Fix mem leak with vring_new_virtqueue()
The functions vring_new_virtqueue() and __vring_new_virtqueue() are used with split rings, and any allocations within these functions are managed outside of the .we_own_ring flag. The commitcbeedb72b9
("virtio_ring: allocate desc state for split ring separately") allocates the desc state within the __vring_new_virtqueue() but frees it only when the .we_own_ring flag is set. This leads to a memory leak when freeing such allocated virtqueues with the vring_del_virtqueue() function. Fix this by moving the desc_state free code outside the flag and only for split rings. Issue was discovered during testing with remoteproc and virtio_rpmsg. Fixes:cbeedb72b9
("virtio_ring: allocate desc state for split ring separately") Signed-off-by: Suman Anna <s-anna@ti.com> Link: https://lore.kernel.org/r/20200224212643.30672-1-s-anna@ti.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Родитель
98d54f81e3
Коммит
f13f09a12c
|
@ -2203,10 +2203,10 @@ void vring_del_virtqueue(struct virtqueue *_vq)
|
|||
vq->split.queue_size_in_bytes,
|
||||
vq->split.vring.desc,
|
||||
vq->split.queue_dma_addr);
|
||||
|
||||
kfree(vq->split.desc_state);
|
||||
}
|
||||
}
|
||||
if (!vq->packed_ring)
|
||||
kfree(vq->split.desc_state);
|
||||
list_del(&_vq->list);
|
||||
kfree(vq);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче