mirror of https://github.com/xemu-project/xemu.git
virtio-gpu: fix resource leak in virgl_cmd_resource_unref
When the guest sends VIRTIO_GPU_CMD_RESOURCE_UNREF without detaching the backing storage beforehand (VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING) we'll leak memory. This patch fixes it for 3d mode, simliar to the 2d mode fix in commit "b8e2392 virtio-gpu: call cleanup mapping function in resource destroy". Reported-by: 李强 <liqiang6-s@360.cn> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 1485167210-4757-1-git-send-email-kraxel@redhat.com
This commit is contained in:
parent
dd248ed7e2
commit
5e8e3c4c75
|
@ -77,10 +77,18 @@ static void virgl_cmd_resource_unref(VirtIOGPU *g,
|
||||||
struct virtio_gpu_ctrl_command *cmd)
|
struct virtio_gpu_ctrl_command *cmd)
|
||||||
{
|
{
|
||||||
struct virtio_gpu_resource_unref unref;
|
struct virtio_gpu_resource_unref unref;
|
||||||
|
struct iovec *res_iovs = NULL;
|
||||||
|
int num_iovs = 0;
|
||||||
|
|
||||||
VIRTIO_GPU_FILL_CMD(unref);
|
VIRTIO_GPU_FILL_CMD(unref);
|
||||||
trace_virtio_gpu_cmd_res_unref(unref.resource_id);
|
trace_virtio_gpu_cmd_res_unref(unref.resource_id);
|
||||||
|
|
||||||
|
virgl_renderer_resource_detach_iov(unref.resource_id,
|
||||||
|
&res_iovs,
|
||||||
|
&num_iovs);
|
||||||
|
if (res_iovs != NULL && num_iovs != 0) {
|
||||||
|
virtio_gpu_cleanup_mapping_iov(res_iovs, num_iovs);
|
||||||
|
}
|
||||||
virgl_renderer_resource_unref(unref.resource_id);
|
virgl_renderer_resource_unref(unref.resource_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue