Re: [PATCH 5/5] gpu: nova-core: vbios: use checked ops and accesses in `FwSecBiosImage::ucode`

Joel Fernandes
2026-04-10T15:05:53Z

Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com> , one comment below

On 4/10/2026 4:38 AM, Eliot Courtney wrote:
> Use checked arithmetic and access for extracting the microcode since the
> offsets are firmware derived.
>
> Fixes: 47c4846e4319 ("gpu: nova-core: vbios: Add support for FWSEC ucode extraction")
> Signed-off-by: Eliot Courtney <ecourtney@nvidia.com>
> ---
> drivers/gpu/nova-core/vbios.rs | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
> index 3bd3ac3a69f2..b509cd8407a5 100644
> --- a/drivers/gpu/nova-core/vbios.rs
> +++ b/drivers/gpu/nova-core/vbios.rs
> @@ -1027,16 +1027,21 @@ pub(crate) fn header(&self) -> Result<FalconUCodeDesc> {
>
> /// Get the ucode data as a byte slice
> pub(crate) fn ucode(&self, desc: &FalconUCodeDesc) -> Result<&[u8]> {
> - let falcon_ucode_offset = self.falcon_ucode_offset;
> -
> // The ucode data follows the descriptor.
> - let ucode_data_offset = falcon_ucode_offset + desc.size();
> - let size = usize::from_safe_cast(desc.imem_load_size() + desc.dmem_load_size());
> + let data = self
> + .base
> + .data
> + .get(self.falcon_ucode_offset..)
> + .ok_or(ERANGE)?;
> + let size = usize::from_safe_cast(
> + desc.imem_load_size()
> + .checked_add(desc.dmem_load_size())
> + .ok_or(ERANGE)?,
> + );
>
> // Get the data slice, checking bounds in a single operation.
> - self.base
> - .data
> - .get(ucode_data_offset..ucode_data_offset + size)
> + data.get(desc.size()..)
> + .and_then(|data| data.get(..size))

It might be worth adding something like:

data.get_slice(start, size) -> Result

in R4L longer term if the data.get(start..).and_then(|data|
data.get(..size)) pattern is common. It seems to be so in this series.