From: sashiko-bot@kernel.org
To: "Gary Guo" <gary@garyguo.net>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
dri-devel@lists.freedesktop.org,
"Alexandre Courbot" <acourbot@nvidia.com>,
ojeda@kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v6 15/20] rust: io: implement a view type for `Coherent`
Date: Mon, 06 Jul 2026 13:03:16 +0000 [thread overview]
Message-ID: <20260706130317.5758C1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260706-io_projection-v6-15-72cd5d055d54@garyguo.net>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] `CoherentView::as_mut` allows converting a shared reference `&Coherent<T>` into a mutable reference `&mut T` on another thread without requiring `T: Send`.
--
commit 4f4557edee91d32bf035e749630652363a232ff1
Author: Gary Guo <gary@garyguo.net>
rust: io: implement a view type for Coherent
Implement a CoherentView type which is a view of Coherent. To be able
to give out DMA handles, the view type contains both CPU and DMA pointers,
and the projection method projects both at once. Delegate most of the Io
implementation to SysMemBackend.
> diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs
> index 200def84fb69e..1535bc6eec642 100644
> --- a/rust/kernel/dma.rs
> +++ b/rust/kernel/dma.rs
[ ... ]
> +impl<'a, T: ?Sized> CoherentView<'a, T> {
[ ... ]
> + /// Returns a mutable reference to the data in the region.
> + ///
> + /// # Safety
> + ///
> + /// * Callers must ensure that the device does not read/write to/from memory while the returned
> + /// reference is live.
> + /// * Callers must ensure that this call does not race with a read (including call to `as_ref`)
> + /// or write (including call to `as_mut`) to the same region while the returned reference is
> + /// live.
> + #[inline]
> + pub unsafe fn as_mut(self) -> &'a mut T {
> + // SAFETY: pointer is aligned and valid per type invariant. Aliasing rule is satisfied per
> + // safety requirement.
> + unsafe { &mut *self.cpu_addr.as_ptr() }
> + }
[Severity: Medium]
Since as_mut() returns a mutable reference &'a mut T, could this allow a
type that is not thread-safe to be mutated on another thread?
If a custom type T is Sync but not Send, CoherentView could still be sent
across threads. Calling as_mut() on the second thread would then yield a
mutable reference to a !Send type, which seems to bypass Rust's thread
safety guarantees.
Does as_mut() need a T: Send bound to ensure soundness?
[ ... ]
> +impl<'a, T: ?Sized + KnownSize> IoBase<'a> for &'a Coherent<T> {
> + type Backend = CoherentIoBackend;
> + type Target = T;
> +
> + #[inline]
> + fn as_view(self) -> CoherentView<'a, Self::Target> {
> + CoherentView {
> + // SAFETY: `cpu_addr` is valid and aligned kernel accessible memory.
> + cpu_addr: unsafe { SysMem::new(self.cpu_addr.as_ptr()) },
> + dma_handle: self.dma_handle,
> + }
> + }
> +}
[Severity: Medium]
This isn't a bug in the trait implementation itself, but this is where
the shared reference &'a Coherent<T> gets converted into a CoherentView.
Combined with the as_mut() method above, does this create a path to gain
mutable access from a shared reference without a T: Send requirement?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260706-io_projection-v6-0-72cd5d055d54@garyguo.net?part=15
next prev parent reply other threads:[~2026-07-06 13:03 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 12:44 [PATCH v6 00/20] rust: I/O type generalization and projection Gary Guo
2026-07-06 12:44 ` [PATCH v6 01/20] rust: io: add dynamically-sized `Region` type Gary Guo
2026-07-06 12:54 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 02/20] rust: io: add missing safety requirement in `IoCapable` methods Gary Guo
2026-07-06 13:00 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 03/20] rust: io: restrict untyped IO access and `register!` to `Region` Gary Guo
2026-07-06 13:03 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 04/20] rust: io: implement `Io` on reference types instead Gary Guo
2026-07-06 12:53 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 05/20] rust: io: generalize `MmioRaw` to pointer to arbitrary type Gary Guo
2026-07-06 12:56 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 06/20] rust: io: rename `Mmio` to `MmioOwned` Gary Guo
2026-07-06 12:57 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 07/20] rust: io: implement `Mmio` as view type Gary Guo
2026-07-06 12:59 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 08/20] rust: pci: io: make `ConfigSpace` a view Gary Guo
2026-07-06 12:51 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 09/20] rust: io: use view types instead of addresses for `Io` Gary Guo
2026-07-06 12:57 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 10/20] pwm: th1520: remove unnecessary `deref` Gary Guo
2026-07-06 12:48 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 11/20] rust: io: remove `MmioOwned` Gary Guo
2026-07-06 12:54 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 12/20] rust: io: move `Io` methods to extension trait Gary Guo
2026-07-06 12:51 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 13/20] rust: io: add projection macro and methods Gary Guo
2026-07-06 12:58 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 14/20] rust: io: add I/O backend for system memory with volatile access Gary Guo
2026-07-06 13:01 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 15/20] rust: io: implement a view type for `Coherent` Gary Guo
2026-07-06 13:03 ` sashiko-bot [this message]
2026-07-06 12:44 ` [PATCH v6 16/20] rust: io: add `read_val` and `write_val` functions on `Io` Gary Guo
2026-07-06 12:59 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 17/20] gpu: nova-core: use I/O projection for cleaner encapsulation Gary Guo
2026-07-06 13:07 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 18/20] rust: dma: drop `dma_read!` and `dma_write!` API Gary Guo
2026-07-06 13:10 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 19/20] rust: io: add copying methods Gary Guo
2026-07-06 13:09 ` sashiko-bot
2026-07-06 12:44 ` [PATCH v6 20/20] rust: io: implement `IoSysMap` Gary Guo
2026-07-06 12:59 ` sashiko-bot
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=20260706130317.5758C1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=acourbot@nvidia.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=linux-pci@vger.kernel.org \
--cc=ojeda@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox