drm/virtio: fix possible leak/unlock virtio_gpu_object_array
authorxndcn <xndchn@gmail.com>
Fri, 5 Mar 2021 15:18:19 +0000 (23:18 +0800)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 9 Mar 2021 11:06:18 +0000 (12:06 +0100)
virtio_gpu_object array is not freed or unlocked in some
failed cases.

Signed-off-by: xndcn <xndchn@gmail.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20210305151819.14330-1-xndchn@gmail.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/virtio/virtgpu_ioctl.c
drivers/gpu/drm/virtio/virtgpu_object.c

index 23eb6d772e405cb7a6e5ab169bfb5a69abf110b5..669f2ee3951548de2fd5481d2a601d8d29ed7706 100644 (file)
@@ -174,7 +174,7 @@ static int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data,
                if (!sync_file) {
                        dma_fence_put(&out_fence->f);
                        ret = -ENOMEM;
-                       goto out_memdup;
+                       goto out_unresv;
                }
 
                exbuf->fence_fd = out_fence_fd;
index d69a5b6da55320c7e10ab88d6baa49f50c4c6e7d..4ff1ec28e630d4c045e54c0e5f4f5a9b47bd4ba2 100644 (file)
@@ -248,6 +248,7 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
 
        ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents);
        if (ret != 0) {
+               virtio_gpu_array_put_free(objs);
                virtio_gpu_free_object(&shmem_obj->base);
                return ret;
        }