Skip to content

Commit

Permalink
drm/virtio: Fix missed dmabuf unpinning in error path of prepare_fb()
Browse files Browse the repository at this point in the history
Correct error handling in prepare_fb() to fix leaking resources when
error happens.

Fixes: 4a696a2 ("drm/virtio: Add prepare and cleanup routines for imported dmabuf obj")
Cc: <stable@vger.kernel.org> # v6.14+
Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Link: https://lore.kernel.org/r/20250401123842.2232205-2-dmitry.osipenko@collabora.com
  • Loading branch information
Dmitry Osipenko committed Apr 1, 2025
1 parent 7cf6dd4 commit 395cc80
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions drivers/gpu/drm/virtio/virtgpu_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,12 +322,6 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane,
return 0;

obj = new_state->fb->obj[0];
if (obj->import_attach) {
ret = virtio_gpu_prepare_imported_obj(plane, new_state, obj);
if (ret)
return ret;
}

if (bo->dumb || obj->import_attach) {
vgplane_st->fence = virtio_gpu_fence_alloc(vgdev,
vgdev->fence_drv.context,
Expand All @@ -336,7 +330,21 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane,
return -ENOMEM;
}

if (obj->import_attach) {
ret = virtio_gpu_prepare_imported_obj(plane, new_state, obj);
if (ret)
goto err_fence;
}

return 0;

err_fence:
if (vgplane_st->fence) {
dma_fence_put(&vgplane_st->fence->f);
vgplane_st->fence = NULL;
}

return ret;
}

static void virtio_gpu_cleanup_imported_obj(struct drm_gem_object *obj)
Expand Down

0 comments on commit 395cc80

Please sign in to comment.