IMO the title should state that this fixes a NULL ptr deref, since that's very 
significant.

On Mon, 2026-03-30 at 14:36 +0100, Tvrtko Ursulin wrote:
> Move the signalling tracepoint to before fence->ops are reset otherwise
> tracepoint will dereference a null pointer.

Can't fully follow; you're talking about the fence ops detachment for
signaled fences?

> 
> Signed-off-by: Tvrtko Ursulin <[email protected]>
> Fixes: 541c8f2468b9 ("dma-buf: detach fence ops on signal v3")
> Cc: Christian König <[email protected]>
> Cc: Philipp Stanner <[email protected]>
> Cc: Boris Brezillon <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> ---
>  drivers/dma-buf/dma-fence.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 1826ba73094c..1c1eaecaf1b0 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -363,6 +363,8 @@ void dma_fence_signal_timestamp_locked(struct dma_fence 
> *fence,
>                                     &fence->flags)))
>               return;
>  
> +     trace_dma_fence_signaled(fence);
> +

If it's about touching the ops, the decisive action would be the
IS_SIGNALED flag, wouldn't it? So trace_dma_fence_signaleld() should be
above the flag test?


P.

>       /*
>        * When neither a release nor a wait operation is specified set the ops
>        * pointer to NULL to allow the fence structure to become independent
> @@ -377,7 +379,6 @@ void dma_fence_signal_timestamp_locked(struct dma_fence 
> *fence,
>  
>       fence->timestamp = timestamp;
>       set_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT, &fence->flags);
> -     trace_dma_fence_signaled(fence);
>  
>       list_for_each_entry_safe(cur, tmp, &cb_list, node) {
>               INIT_LIST_HEAD(&cur->node);

Reply via email to