All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Alexandre Courbot" <acourbot@nvidia.com>
Cc: ojeda@kernel.org, dri-devel@lists.freedesktop.org,
	"Danilo Krummrich" <dakr@kernel.org>
Subject: Re: [PATCH v4 01/13] gpu: nova-core: gsp: sequencer: use GspBootContext
Date: Mon, 29 Jun 2026 14:22:48 +0000	[thread overview]
Message-ID: <20260629142248.B368F1F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260629-nova-bootcontext-v4-1-5539d8469590@nvidia.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

Pre-existing issues:
- [High] Incorrect loop bounds check causes RPC message padding bytes to be executed as hardware sequencer commands (e.g., unintended RegWrite to address 0).
- [High] Fixed-size zero-padded buffer bypasses length checks for truncated commands, leading to execution of zeroed out-of-bounds payloads.
- [High] Unaligned stack array passed to `FromBytes::from_bytes` may cause spurious parsing failures and abort the GSP boot process depending on compiler stack layout.
--

commit c264aea160f8cb747324a1d5a568d1e3a869623a
Author: Alexandre Courbot <acourbot@nvidia.com>

gpu: nova-core: gsp: sequencer: use GspBootContext

`GspBootContext` contains all the resources currently carried by
`GspSequencerParams`, so replace the latter with the former for better
integration with the boot process and less code.

> diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core/gsp/sequencer.rs
> index 13983d42b12bc..f55205bd61f35 100644
> --- a/drivers/gpu/nova-core/gsp/sequencer.rs
> +++ b/drivers/gpu/nova-core/gsp/sequencer.rs

[ ... ]

> @@ -335,24 +336,13 @@ fn iter(&self) -> GspSeqIter<'_> {
>      }
>  }

[Severity: High]
This is a pre-existing issue, but does this bounds check in GspSeqIter::next()
fail to prevent processing alignment padding bytes?

In drivers/gpu/nova-core/gsp/sequencer.rs:GspSeqIter::new(), total_cmds is
initialized using the length in DWORDs rather than the command count:

    GspSeqIter {
        ...
        total_cmds: self.seq_info.cmd_index,
        ...
    }

Then in GspSeqIter::next(), the loop bounds check compares commands processed
against this DWORD count:

    if self.cmds_processed >= self.total_cmds ||
       self.current_offset >= self.cmd_data.len() {
        return None;
    }

If the message buffer contains RPC alignment padding (e.g., trailing zeros),
could cmds_processed fail to reach total_cmds, causing these zeros to be
incorrectly parsed as hardware sequencer commands (where opcode 0 is RegWrite
to address 0)?

[Severity: High]
This is a pre-existing issue, but does passing a zero-padded buffer bypass
the length check for truncated commands?

In drivers/gpu/nova-core/gsp/sequencer.rs:GspSeqIter::next(), a truncated
command is copied into a fixed 24-byte zero-initialized array, and a slice
covering the entire array is passed to GspSeqCmd::new():

    let mut buffer = [0u8; CMD_SIZE];
    ...
    buffer[..copy_len].copy_from_slice(
        &self.cmd_data[offset..offset + copy_len]
    );
    let cmd_result = GspSeqCmd::new(&buffer, self.dev);

Inside GspSeqCmd::new(), the length check evaluates data.len(), which will
always be 24 regardless of copy_len:

    if data.len() < size {
        dev_err!(dev, "Data is not enough for command\n");
        return Err(EINVAL);
    }

Could this allow execution of malformed, zero-padded hardware commands?

[Severity: High]
This is a pre-existing issue, but can the unaligned stack array passed to
FromBytes::from_bytes() cause spurious parsing failures?

In drivers/gpu/nova-core/gsp/sequencer.rs:GspSeqIter::next(), buffer is backed
by a u8 array which only guarantees 1-byte alignment:

    let mut buffer = [0u8; CMD_SIZE];

When this buffer is passed to GspSeqCmd::new() and then to
SequencerBufferCmd::from_bytes():

    let fw_cmd = fw::SequencerBufferCmd::from_bytes(data).ok_or(EINVAL)?;

If the compiler places the array at a misaligned address on the stack, could
from_bytes() (which expects 4-byte alignment for u32 fields) fail silently and
abort the GSP boot process?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260629-nova-bootcontext-v4-0-5539d8469590@nvidia.com?part=1

  reply	other threads:[~2026-06-29 14:22 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-29 14:09 [PATCH v4 00/13] gpu: nova-core: consolidate and streamline GSP boot process Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 01/13] gpu: nova-core: gsp: sequencer: use GspBootContext Alexandre Courbot
2026-06-29 14:22   ` sashiko-bot [this message]
2026-06-29 14:09 ` [PATCH v4 02/13] gpu: nova-core: gsp: sequencer: do not store sequence into GspSequencer Alexandre Courbot
2026-06-29 14:19   ` sashiko-bot
2026-06-29 14:09 ` [PATCH v4 03/13] gpu: nova-core: gsp: replace BootUnloadGuard with local handlers Alexandre Courbot
2026-06-29 14:21   ` sashiko-bot
2026-07-01  2:54   ` Eliot Courtney
2026-07-06 10:00     ` Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 04/13] gpu: nova-core: gsp: pass GspBootContext to unload methods Alexandre Courbot
2026-07-01  3:57   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 05/13] gpu: nova-core: gsp: centralize missing unload bundle warnings Alexandre Courbot
2026-06-29 14:20   ` sashiko-bot
2026-07-01  4:06   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 06/13] gpu: nova-core: gsp: fold TU102 unload bundle construction into HAL method Alexandre Courbot
2026-07-01  4:15   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 07/13] gpu: nova-core: gsp: turn FWSEC execution " Alexandre Courbot
2026-07-01  4:16   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 08/13] gpu: nova-core: gsp: make use of FWSEC bootloader a property of the TU102 HAL Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 09/13] gpu: nova-core: introduce GspBootMethod Alexandre Courbot
2026-07-02  2:28   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 10/13] gpu: nova-core: avoid repeated calls to pci::Device::as_ref Alexandre Courbot
2026-06-29 14:17   ` sashiko-bot
2026-07-01  6:38   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 11/13] gpu: nova-core: gsp: pass GspBootContext mutably Alexandre Courbot
2026-07-01  6:40   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 12/13] gpu: nova-core: gsp: separate context and GPU lifetimes in GspBootContext Alexandre Courbot
2026-06-29 14:22   ` sashiko-bot
2026-07-01  6:52   ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 13/13] gpu: nova-core: store Fsp instance in Gpu Alexandre Courbot
2026-06-29 14:27   ` sashiko-bot
2026-07-01  6:46   ` Eliot Courtney

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=20260629142248.B368F1F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=acourbot@nvidia.com \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.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.