From: sashiko-bot@kernel.org
To: "Gary Guo" <gary@garyguo.net>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
ojeda@kernel.org, "Alexandre Courbot" <acourbot@nvidia.com>,
dri-devel@lists.freedesktop.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v4 08/16] drm/tyr: specify base type for registers
Date: Tue, 01 Sep 2026 17:04:39 +0000 [thread overview]
Message-ID: <20260901170440.4EC8A1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260901-typed_register-v4-8-5552b1d59525@garyguo.net>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Out-of-bounds Register Definition: The `DOORBELL` register array exceeds the maximum size of its specified base type `TyrRegisters`.
- [Low] API Misuse: Applying `base: TyrRegisters;` to purely in-memory bitfields allows them to silently alias hardware MMIO registers.
--
commit 1d550d1a42720086769c2c8dc9fd2f019102d497
Author: Gary Guo <gary@garyguo.net>
drm/tyr: specify base type for registers
This commit updates register definitions to specify TyrRegisters as the base
type for all register! invocations.
> diff --git a/drivers/gpu/drm/tyr/driver.rs b/drivers/gpu/drm/tyr/driver.rs
> index bfb0ba19caff9..730b84e37a544 100644
> --- a/drivers/gpu/drm/tyr/driver.rs
> +++ b/drivers/gpu/drm/tyr/driver.rs
> @@ -46,6 +46,7 @@
> };
>
> pub(crate) type IoMem<'a> = kernel::io::mem::IoMem<'a, SZ_2M>;
> +pub(crate) type TyrRegisters = kernel::io::Region<SZ_2M>;
[ ... ]
> diff --git a/drivers/gpu/drm/tyr/fw.rs b/drivers/gpu/drm/tyr/fw.rs
> index 47d25c901bd01..7edb5eff17077 100644
> --- a/drivers/gpu/drm/tyr/fw.rs
> +++ b/drivers/gpu/drm/tyr/fw.rs
> @@ -101,6 +102,8 @@ fn from(value: CacheMode) -> Self {
> }
>
> register! {
> + base: TyrRegisters;
> +
> #[allow(non_upper_case_globals)]
> pub(super) SectionFlags(u32) @ 0x0 {
> 0:0 read => bool;
[Severity: Low]
Does applying an MMIO base to this firmware struct unintentionally allow it
to be used in hardware I/O operations?
By specifying base: TyrRegisters; and @ 0x0, SectionFlags gains I/O traits
tied to the hardware MMIO base. Since this appears to be an in-memory bitfield
used for parsing firmware, should the bitfield! macro be used instead to
prevent it from silently aliasing hardware registers?
[ ... ]
> diff --git a/drivers/gpu/drm/tyr/regs.rs b/drivers/gpu/drm/tyr/regs.rs
> index a62724378ced2..0c419c4e1186c 100644
> --- a/drivers/gpu/drm/tyr/regs.rs
> +++ b/drivers/gpu/drm/tyr/regs.rs
[ ... ]
> @@ -1104,6 +1131,8 @@ fn from(val: MemoryType) -> Self {
> }
>
> register! {
> + base: TyrRegisters;
> +
> /// Stage 1 memory attributes (8-bit bitfield).
> ///
> /// This is not an actual register, but a bitfield definition used by the MEMATTR
[Severity: Low]
Similar to SectionFlags above, the comment explicitly notes this is not an
actual register. Does adding base: TyrRegisters; here mistakenly grant it
MMIO traits and allow accidental I/O operations?
[ ... ]
> @@ -1770,6 +1811,8 @@ pub(crate) mod doorbell_block {
> const STRIDE: usize = 0x10000;
>
> register! {
> + base: TyrRegisters;
> +
> /// Doorbell request register. Write-only.
> pub(crate) DOORBELL(u32)[NUM_DOORBELLS, stride = STRIDE] @ 0x80000 {
> /// Doorbell set. Writing 1 triggers the doorbell.
[Severity: Medium]
Does this base type provide enough address space for the entire array?
TyrRegisters is defined in driver.rs as kernel::io::Region<SZ_2M>
(a 2MB limit). However, the DOORBELL array has 64 elements (NUM_DOORBELLS)
with a stride of 0x10000 and starts at offset 0x80000.
Accessing higher indices in this array will exceed the 2MB limit (e.g., the
maximum offset is 0x80000 + 63 * 0x10000 = 0x470000, ~4.5MB). Will this
result in a build assertion failure or runtime out-of-bounds error when
upper doorbell indices are accessed?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260901-typed_register-v4-0-5552b1d59525@garyguo.net?part=8
next prev parent reply other threads:[~2026-09-01 17:04 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 16:50 [PATCH v4 00/16] rust: io: support register projections and remove relative registers Gary Guo
2026-09-01 16:50 ` [PATCH v4 01/16] rust: io: register: reimplement as proc macro Gary Guo
2026-09-01 16:56 ` sashiko-bot
2026-09-03 11:46 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 02/16] rust: mem: add `transmute` with deferred size check Gary Guo
2026-09-01 16:59 ` sashiko-bot
2026-09-03 11:46 ` Alexandre Courbot
2026-09-05 19:18 ` Miguel Ojeda
2026-09-01 16:50 ` [PATCH v4 03/16] rust: mem: add `AsRepr` and `AsReprMut` Gary Guo
2026-09-01 16:56 ` sashiko-bot
2026-09-03 12:02 ` Alexandre Courbot
2026-09-05 19:22 ` Miguel Ojeda
2026-09-05 23:32 ` Gary Guo
2026-09-06 0:01 ` Miguel Ojeda
2026-09-01 16:50 ` [PATCH v4 04/16] rust: io: perform conversions using `AsRepr` Gary Guo
2026-09-01 16:56 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 05/16] rust: io: support register projections Gary Guo
2026-09-01 16:59 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 06/16] rust: io: register: allow explicit base type specification Gary Guo
2026-09-01 16:55 ` sashiko-bot
2026-09-03 12:16 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 07/16] gpu: nova-core: specify base type for registers Gary Guo
2026-09-01 16:55 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 08/16] drm/tyr: " Gary Guo
2026-09-01 17:04 ` sashiko-bot [this message]
2026-09-01 16:50 ` [PATCH v4 09/16] samples: rust: pci: " Gary Guo
2026-09-01 16:56 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 10/16] rust: io: register: make register have a typed base Gary Guo
2026-09-01 16:59 ` sashiko-bot
2026-09-03 12:27 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 11/16] rust: io: register: support fixed offset register without bitfield Gary Guo
2026-09-01 17:02 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 12/16] gpu: nova-core: use projection for PFALCON and PFALCON2 registers Gary Guo
2026-09-01 16:59 ` sashiko-bot
2026-09-03 12:34 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 13/16] gpu: nova-core: convert hshub0 from relative register to projection Gary Guo
2026-09-01 17:01 ` sashiko-bot
2026-09-03 12:41 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 14/16] rust: io: register: remove relative registers Gary Guo
2026-09-01 17:02 ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 15/16] rust: io: register: remove `Register` trait and cleanup macro Gary Guo
2026-09-01 17:03 ` sashiko-bot
2026-09-03 12:43 ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 16/16] rust: io: register: unify handling of register with/without bitfields Gary Guo
2026-09-01 17:02 ` sashiko-bot
2026-09-03 12:49 ` [PATCH v4 00/16] rust: io: support register projections and remove relative registers Alexandre Courbot
2026-09-03 19:22 ` Danilo Krummrich
2026-09-03 19:27 ` Danilo Krummrich
2026-09-05 19:24 ` Miguel Ojeda
2026-09-06 13:18 ` Danilo Krummrich
2026-09-06 13:19 ` 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=20260901170440.4EC8A1F000E9@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 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.