All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Philipp Stanner" <phasta@kernel.org>
Cc: dri-devel@lists.freedesktop.org, media-ci@linuxtv.org,
	ojeda@kernel.org, gary@garyguo.net
Subject: Re: [PATCH 4/8] rust: DmaFence: Replace call_rcu() with synchronize_rcu()
Date: Fri, 06 Nov 2026 14:15:41 +0000	[thread overview]
Message-ID: <sashiko-outbox-201554@kernel.org> (raw)
In-Reply-To: <20261106140752.520386-6-phasta@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [High] rust: dma_fence: payload leak in DriverFence::drop() dropping
  NonNull wrapper
--

commit afa4bc5452ca231722f66b50ee2edd5a29c21433
Author: Philipp Stanner <phasta@kernel.org>

rust: DmaFence: Replace call_rcu() with synchronize_rcu()

This commit replaces the deferred call_rcu() callback in DriverFence::drop()
and the rcu_barrier() in FenceContext::drop() with synchronous
synchronize_rcu() calls so that driver fence data is not dropped in atomic
context.

> diff --git a/rust/kernel/dma_buf/dma_fence.rs b/rust/kernel/dma_buf/dma_fence.rs
> index c04b68fe67fe3..f74119b4d7f87 100644
> --- a/rust/kernel/dma_buf/dma_fence.rs
> +++ b/rust/kernel/dma_buf/dma_fence.rs

[ ... ]

> @@ -988,59 +980,18 @@ fn drop(&mut self) {
>              return;
>          }
>  
> +        // Make sure none of the fence backend_ops can access fence-data anymore.
> +        //
> +        // TODO:
> +        // This would not be necessary if the C dma_fence backend were using a
> +        // spinlock to properly synchronize its signaled state. Fix it in C and
> +        // then remove synchronize_rcu().
> +        synchronize_rcu();
> +
>          // SAFETY: Valid because `self` is valid.
> -        let rcu_head_ptr = unsafe { &raw mut (*self.data.as_ptr()).rcu_head };
> +        unsafe { drop_in_place(&raw mut self.data) };
>  
> -        // SAFETY: `call_rcu()` is always safe to be called. `rcu_head_ptr` was
> -        // created validly above. The module must perform a `synchronize_rcu()`
> -        // or `rcu_barrier()` call to guard against module unload.
> -        unsafe { bindings::call_rcu(rcu_head_ptr, Some(drop_driver_fence_data::<T>)) };
> +        // SAFETY: The `synchronize_rcu()` above ensures all accessors are gone.
> +        unsafe { bindings::dma_fence_put(self.as_raw()) };
>      }
>  }

[Severity: High]
Does drop_in_place(&raw mut self.data) leak the user payload
T::FenceDataType on every DriverFence drop?

On DriverFence, self.data is NonNull<DriverFenceData<'a, T>>, which is a
pointer wrapper with no Drop implementation, whereas the user payload lives
in (*self.data.as_ptr()).data.  As a result, drop_in_place(&raw mut
self.data) is a no-op and T::FenceDataType's destructor never runs before the
C backend frees the allocation.

Also, when dropping (*self.data.as_ptr()).data in place, the raw dma_fence
pointer should be obtained before drop_in_place() because self.as_raw()
creates a shared reference &DriverFenceData<'a, T>, which would otherwise
happen after its data field has already been dropped.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261106140752.520386-2-phasta@kernel.org?part=4

  reply	other threads:[~2026-11-06 14:15 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06 14:07 [PATCH 0/8] rust: Add drm::JobQueue Philipp Stanner
2026-11-06 14:07 ` [PATCH 1/8] rust: DmaFence: Implement Deref for FenceContext Philipp Stanner
2026-11-06 14:07 ` [PATCH 2/8] rust: DmaFence: Add ID accessor " Philipp Stanner
2026-11-06 14:07 ` [PATCH 3/8] rust: DmaFence: Don't drop on signal Philipp Stanner
2026-11-06 14:27   ` sashiko-bot
2026-11-06 14:07 ` [PATCH 4/8] rust: DmaFence: Replace call_rcu() with synchronize_rcu() Philipp Stanner
2026-11-06 14:15   ` sashiko-bot [this message]
2026-11-06 14:07 ` [PATCH 5/8] rust: DmaFence: Replace is_signaled() with status() Philipp Stanner
2026-11-06 14:18   ` sashiko-bot
2026-11-06 14:07 ` [PATCH 6/8] rust: DmaFence: Pass result in callbacks Philipp Stanner
2026-11-06 14:07 ` [PATCH 7/8] rust: drm: Add JobQueue Philipp Stanner
2026-11-06 14:46   ` sashiko-bot
2026-11-07 13:55   ` Younes Akhouayri
2026-11-10  9:14     ` Philipp Stanner
2026-11-06 14:07 ` [PATCH 8/8] MAINTAINERS: Add drm::JobQueue to drm_sched's entry Philipp Stanner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-201554@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gary@garyguo.net \
    --cc=media-ci@linuxtv.org \
    --cc=ojeda@kernel.org \
    --cc=phasta@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.