Re: [PATCH v4] drm: Fix drm_pending_vblank_event leak in error path for out_fence_ptr

From: Markus Elfring

Date: Fri Sep 11 2026 - 10:51:37 EST


> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -1458,10 +1458,12 @@ static int prepare_signaling(struct drm_device *dev,
> struct dma_fence *fence;
> struct drm_out_fence_state *f;
>
> + ret = -ENOMEM;
> +

How do you think about to refine the source code a bit more?

I imagine that this assignment statement can be moved behind an additional label
like e_nomem.


> f = krealloc(*fence_state, sizeof(**fence_state) *
> (*num_fences + 1), GFP_KERNEL);
> if (!f)
> - return -ENOMEM;
> + goto err_free_event;
>
> memset(&f[*num_fences], 0, sizeof(*f));
>



> @@ -1531,6 +1533,11 @@ static int prepare_signaling(struct drm_device *dev,
> }
>
> return 0;
> +
> +err_free_event:
> + drm_event_cancel_free(dev, &crtc_state->event->base);

+err_reset_event:

Would you like to avoid a bit of duplicate source code from an other if branch?
https://elixir.bootlin.com/linux/v7.3-rc1/source/drivers/gpu/drm/drm_atomic_uapi.c#L1457-L1461

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/coding-style.rst?h=v7.3-rc2#n572


> + crtc_state->event = NULL;
> + return ret;
> }


Regards,
Markus