From: "Danilo Krummrich" <dakr@kernel.org>
To: "Lyude Paul" <lyude@redhat.com>
Cc: <nouveau@lists.freedesktop.org>, "Gary Guo" <gary@garyguo.net>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
<rust-for-linux@vger.kernel.org>,
"Matthew Maurer" <mmaurer@google.com>,
"FUJITA Tomonori" <fujita.tomonori@gmail.com>,
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
<christian.koenig@amd.com>, "Asahi Lina" <lina@asahilina.net>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Simona Vetter" <simona@ffwll.ch>,
"Alice Ryhl" <aliceryhl@google.com>,
"Boqun Feng" <boqun@kernel.org>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Krishna Ketan Rai" <prafulrai522@gmail.com>,
<linux-media@vger.kernel.org>,
"Shankari Anand" <shankari.ak0208@gmail.com>,
"David Airlie" <airlied@gmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
<linaro-mm-sig@lists.linaro.org>,
"Asahi Lina" <lina+kernel@asahilina.net>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
<kernel@vger.kernel.org>
Subject: Re: [PATCH v9 5/7] rust: drm: gem: shmem: Add DRM shmem helper abstraction
Date: Thu, 26 Mar 2026 02:14:58 +0100 [thread overview]
Message-ID: <DHCBE2PV3C2G.O9UJNFQX7E5P@kernel.org> (raw)
In-Reply-To: <20260316211646.650074-6-lyude@redhat.com>
On Mon Mar 16, 2026 at 10:16 PM CET, Lyude Paul wrote:
> + /// Creates (if necessary) and returns an immutable reference to a scatter-gather table of DMA
> + /// pages for this object.
> + ///
> + /// This will pin the object in memory.
> + #[inline]
> + pub fn sg_table(&self) -> Result<&scatterlist::SGTable> {
> + // SAFETY:
> + // - drm_gem_shmem_get_pages_sgt is thread-safe.
> + // - drm_gem_shmem_get_pages_sgt returns either a valid pointer to a scatterlist, or an
> + // error pointer.
> + let sgt =
> + from_err_ptr(unsafe { bindings::drm_gem_shmem_get_pages_sgt(self.as_raw_shmem()) })?;
This is unsound as nothing guarantees that the device used by
drm_gem_shmem_get_pages_sgt() is actually bound to the calling driver. It is
also not guaranteed that the DMA mapping within the returned &SGTable does not
out-live driver unbind.
There are two possible solutions.
(1) Change drm_gem_shmem_get_pages_sgt() to provide this guarantee.
(2) Don't use drm_gem_shmem_get_pages_sgt() in the first place and instead use
SGTable::new(), which guarantees to destroy the backing DMA mapping on
driver unbind.
In any case, this function needs to take a &Device<Bound> argument that matches
the bus devices stored in the backing GEM object.
> +
> + // SAFETY: We checked above that `sgt` is not an error pointer, so it must be a valid
> + // pointer to a scatterlist
> + Ok(unsafe { scatterlist::SGTable::from_raw(sgt) })
> + }
> +}
WARNING: multiple messages have this Message-ID (diff)
From: "Danilo Krummrich" <dakr@kernel.org>
To: "Lyude Paul" <lyude@redhat.com>
Cc: nouveau@lists.freedesktop.org, Gary Guo <gary@garyguo.net>,
Daniel Almeida <daniel.almeida@collabora.com>,
rust-for-linux@vger.kernel.org,
Matthew Maurer <mmaurer@google.com>,
FUJITA Tomonori <fujita.tomonori@gmail.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
christian.koenig@amd.com, Asahi Lina <lina@asahilina.net>,
Miguel Ojeda <ojeda@kernel.org>,
Andreas Hindborg <a.hindborg@kernel.org>,
Simona Vetter <simona@ffwll.ch>,
Alice Ryhl <aliceryhl@google.com>, Boqun Feng <boqun@kernel.org>,
Sumit Semwal <sumit.semwal@linaro.org>,
Krishna Ketan Rai <prafulrai522@gmail.com>,
linux-media@vger.kernel.org,
Shankari Anand <shankari.ak0208@gmail.com>,
Benno Lossin <lossin@kernel.org>,
Viresh Kumar <viresh.kumar@linaro.org>,
linaro-mm-sig@lists.linaro.org,
Asahi Lina <lina+kernel@asahilina.net>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
kernel@vger.kernel.org
Subject: Re: [PATCH v9 5/7] rust: drm: gem: shmem: Add DRM shmem helper abstraction
Date: Thu, 26 Mar 2026 02:14:58 +0100 [thread overview]
Message-ID: <DHCBE2PV3C2G.O9UJNFQX7E5P@kernel.org> (raw)
In-Reply-To: <20260316211646.650074-6-lyude@redhat.com>
On Mon Mar 16, 2026 at 10:16 PM CET, Lyude Paul wrote:
> + /// Creates (if necessary) and returns an immutable reference to a scatter-gather table of DMA
> + /// pages for this object.
> + ///
> + /// This will pin the object in memory.
> + #[inline]
> + pub fn sg_table(&self) -> Result<&scatterlist::SGTable> {
> + // SAFETY:
> + // - drm_gem_shmem_get_pages_sgt is thread-safe.
> + // - drm_gem_shmem_get_pages_sgt returns either a valid pointer to a scatterlist, or an
> + // error pointer.
> + let sgt =
> + from_err_ptr(unsafe { bindings::drm_gem_shmem_get_pages_sgt(self.as_raw_shmem()) })?;
This is unsound as nothing guarantees that the device used by
drm_gem_shmem_get_pages_sgt() is actually bound to the calling driver. It is
also not guaranteed that the DMA mapping within the returned &SGTable does not
out-live driver unbind.
There are two possible solutions.
(1) Change drm_gem_shmem_get_pages_sgt() to provide this guarantee.
(2) Don't use drm_gem_shmem_get_pages_sgt() in the first place and instead use
SGTable::new(), which guarantees to destroy the backing DMA mapping on
driver unbind.
In any case, this function needs to take a &Device<Bound> argument that matches
the bus devices stored in the backing GEM object.
> +
> + // SAFETY: We checked above that `sgt` is not an error pointer, so it must be a valid
> + // pointer to a scatterlist
> + Ok(unsafe { scatterlist::SGTable::from_raw(sgt) })
> + }
> +}
next prev parent reply other threads:[~2026-03-26 1:15 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 21:16 [PATCH v9 0/7] Rust bindings for gem shmem Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 1/7] rust: drm: Add gem::impl_aref_for_gem_obj! Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 2/7] rust: drm: gem: Add raw_dma_resv() function Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 3/7] rust: helpers: Add bindings/wrappers for dma_resv_lock Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 4/7] rust: gem: Introduce DriverObject::Args Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 5/7] rust: drm: gem: shmem: Add DRM shmem helper abstraction Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-26 1:14 ` Danilo Krummrich [this message]
2026-03-26 1:14 ` Danilo Krummrich
2026-03-16 21:16 ` [PATCH v9 6/7] rust: drm: gem: Introduce shmem::SGTable Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-16 21:16 ` [PATCH v9 7/7] rust: drm/gem: Add vmap functions to shmem bindings Lyude Paul
2026-03-16 21:16 ` Lyude Paul
2026-03-20 9:30 ` Alvin Sun
2026-03-20 9:30 ` Alvin Sun
2026-03-26 1:15 ` (subset) [PATCH v9 0/7] Rust bindings for gem shmem Danilo Krummrich
2026-03-26 1:15 ` Danilo Krummrich
2026-03-26 15:37 ` Alice Ryhl
2026-03-26 15:37 ` Alice Ryhl
2026-03-26 16:10 ` Janne Grunau
2026-03-26 16:10 ` Janne Grunau
2026-03-27 9:53 ` Miguel Ojeda
2026-03-27 9:53 ` Miguel Ojeda
2026-03-30 18:42 ` Deborah Brouwer
2026-03-30 18:42 ` Deborah Brouwer
2026-03-27 20:44 ` (subset) " Danilo Krummrich
2026-03-27 20:44 ` Danilo Krummrich
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=DHCBE2PV3C2G.O9UJNFQX7E5P@kernel.org \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=boqun@kernel.org \
--cc=christian.koenig@amd.com \
--cc=daniel.almeida@collabora.com \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=kernel@vger.kernel.org \
--cc=lina+kernel@asahilina.net \
--cc=lina@asahilina.net \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-media@vger.kernel.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=mmaurer@google.com \
--cc=nouveau@lists.freedesktop.org \
--cc=ojeda@kernel.org \
--cc=prafulrai522@gmail.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=shankari.ak0208@gmail.com \
--cc=simona@ffwll.ch \
--cc=sumit.semwal@linaro.org \
--cc=viresh.kumar@linaro.org \
/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.