public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
From: "Eliot Courtney" <ecourtney@nvidia.com>
To: "Joel Fernandes" <joelagnelf@nvidia.com>,
	"Eliot Courtney" <ecourtney@nvidia.com>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Alexandre Courbot" <acourbot@nvidia.com>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>
Cc: "John Hubbard" <jhubbard@nvidia.com>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Timur Tabi" <ttabi@nvidia.com>, <rust-for-linux@vger.kernel.org>,
	<dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/5] gpu: nova-core: vbios: use checked accesses in `setup_falcon_data`
Date: Mon, 13 Apr 2026 15:04:33 +0900	[thread overview]
Message-ID: <DHRSTLTQNYTB.1ZQO8FBOU678Q@nvidia.com> (raw)
In-Reply-To: <8bf30537-de54-4be0-a676-3e8aad6fb312@nvidia.com>

On Fri Apr 10, 2026 at 11:53 PM JST, Joel Fernandes wrote:
> Hi Eliot,
>
> On 4/10/2026 4:38 AM, Eliot Courtney wrote:
>> Use checked arithmetic and accesses where the values are firmware
>> derived to prevent potential overflow.
>> 
>> Fixes: dc70c6ae2441 ("gpu: nova-core: vbios: Add support to look up PMU table in FWSEC")
>> Signed-off-by: Eliot Courtney <ecourtney@nvidia.com>
>> ---
>>  drivers/gpu/nova-core/vbios.rs | 20 ++++++++------------
>>  1 file changed, 8 insertions(+), 12 deletions(-)
>> 
>> diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
>> index de856000de23..2b0dc1a9125d 100644
>> --- a/drivers/gpu/nova-core/vbios.rs
>> +++ b/drivers/gpu/nova-core/vbios.rs
>> @@ -936,17 +936,12 @@ fn setup_falcon_data(
>>  
>>          self.falcon_data_offset = Some(offset);
>>  
>> -        if pmu_in_first_fwsec {
>> -            self.pmu_lookup_table = Some(PmuLookupTable::new(
>> -                &self.base.dev,
>> -                &first_fwsec.base.data[offset..],
>> -            )?);
>> +        let pmu_lookup_data = if pmu_in_first_fwsec {
>> +            &first_fwsec.base.data[offset..]
>
> I suggest use get() here as well for consistency with your use of get()
> further below.
>   first_fwsec.base.data.get(offset..).ok_or(EINVAL)?

This one has a local proof that it won't ever OOB, so I didn't use
get(). Not sure what the convention is, but what makes most sense to me
is to use get() if there is no local proof that it will always succeed
and use [] if there is such a proof. WDYT? Do you know if there's a
decided convention for this?

>
>>          } else {
>> -            self.pmu_lookup_table = Some(PmuLookupTable::new(
>> -                &self.base.dev,
>> -                &self.base.data[offset..],
>> -            )?);
>> -        }
>> +            self.base.data.get(offset..).ok_or(EINVAL)?
>> +        };
>> +        self.pmu_lookup_table = Some(PmuLookupTable::new(&self.base.dev, pmu_lookup_data)?);
>>  
>>          match self
>>              .pmu_lookup_table
>> @@ -955,8 +950,9 @@ fn setup_falcon_data(
>>              .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD)
>>          {
>>              Ok(entry) => {
>> -                let mut ucode_offset = usize::from_safe_cast(entry.data);
>> -                ucode_offset -= pci_at_image.base.data.len();
>> +                let mut ucode_offset = usize::from_safe_cast(entry.data)
>> +                    .checked_sub(pci_at_image.base.data.len())
>> +                    .ok_or(EINVAL)?;
>>                  if ucode_offset < first_fwsec.base.data.len() {
>>                      dev_err!(self.base.dev, "Falcon Ucode offset not in second Fwsec.\n");
>>                      return Err(EINVAL);
>
> How about replace this whole block with:
>
>   self.falcon_ucode_offset = Some(
>       usize::from_safe_cast(entry.data)
>           .checked_sub(pci_at_image.base.data.len())
>           .and_then(|o| o.checked_sub(first_fwsec.base.data.len()))
>           .ok_or(EINVAL)
>           .inspect_err(|_| {
>               dev_err!(self.base.dev,
>                        "Falcon Ucode offset not in second Fwsec.\n");
>           })?,
>   );
>
> That way, the error message also shows up when
> checked_sub(pci_at_image.base.data.len()) fails and it is a bit cleaner.

Yeah, this looks like a better way to do it. Thanks! Will apply.

>
> If you agree with both the above suggestions:
>
> Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
>
> thanks,
>
> --
> Joel Fernandes


  reply	other threads:[~2026-04-13  6:04 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-10  8:38 [PATCH 0/5] gpu: nova-core: vbios: harden various array accesses Eliot Courtney
2026-04-10  8:38 ` [PATCH 1/5] gpu: nova-core: vbios: fix various cases of reading past `BIOS_MAX_SCAN_LEN` Eliot Courtney
2026-04-10 14:08   ` Joel Fernandes
2026-04-10  8:38 ` [PATCH 2/5] gpu: nova-core: vbios: limit `BitToken` entry reads Eliot Courtney
2026-04-10 14:30   ` Joel Fernandes
2026-04-10  8:38 ` [PATCH 3/5] gpu: nova-core: vbios: use checked accesses in `setup_falcon_data` Eliot Courtney
2026-04-10 14:53   ` Joel Fernandes
2026-04-13  6:04     ` Eliot Courtney [this message]
2026-04-13  7:10       ` Alexandre Courbot
2026-04-14  3:13         ` Eliot Courtney
2026-04-10  8:38 ` [PATCH 4/5] gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header` Eliot Courtney
2026-04-10 15:00   ` Joel Fernandes
2026-04-10  8:38 ` [PATCH 5/5] gpu: nova-core: vbios: use checked ops and accesses in `FwSecBiosImage::ucode` Eliot Courtney
2026-04-10 15:05   ` Joel Fernandes
2026-04-13  6:20     ` Eliot Courtney
2026-04-13 12:59       ` Alexandre Courbot

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=DHRSTLTQNYTB.1ZQO8FBOU678Q@nvidia.com \
    --to=ecourtney@nvidia.com \
    --cc=acourbot@nvidia.com \
    --cc=airlied@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=apopple@nvidia.com \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jhubbard@nvidia.com \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=simona@ffwll.ch \
    --cc=ttabi@nvidia.com \
    /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