From: Eliot Courtney Date: Mon, 25 May 2026 13:57:24 +0000 (+0900) Subject: gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header` X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=25ad950b4ee37f7b42e006f508a793b7c38fcc12;p=thirdparty%2Fkernel%2Flinux.git gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header` Use checked access in `FwSecBiosImage::header` for getting the header version since the value is firmware derived. Fixes: 47c4846e4319 ("gpu: nova-core: vbios: Add support for FWSEC ucode extraction") Reviewed-by: Joel Fernandes Reviewed-by: John Hubbard Signed-off-by: Eliot Courtney Link: https://patch.msgid.link/20260525-fix-vbios-v5-6-e5e455251537@nvidia.com Signed-off-by: Danilo Krummrich --- diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index c62d918a3041..48a46684e279 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -1077,17 +1077,14 @@ impl FwSecBiosBuilder { impl FwSecBiosImage { /// Get the FwSec header ([`FalconUCodeDesc`]). pub(crate) fn header(&self) -> Result { - // Get the falcon ucode offset that was found in setup_falcon_data. - let falcon_ucode_offset = self.falcon_ucode_offset; - - // Read the first 4 bytes to get the version. - let hdr_bytes: [u8; 4] = self.base.data[falcon_ucode_offset..falcon_ucode_offset + 4] - .try_into() - .map_err(|_| EINVAL)?; - let hdr = u32::from_le_bytes(hdr_bytes); - let ver = (hdr & 0xff00) >> 8; + let data = self + .base + .data + .get(self.falcon_ucode_offset..) + .ok_or(EINVAL)?; - let data = self.base.data.get(falcon_ucode_offset..).ok_or(EINVAL)?; + // Read the version byte from the header. + let ver = data.get(1).copied().ok_or(EINVAL)?; match ver { 2 => { let v2 = FalconUCodeDescV2::from_bytes_copy_prefix(data)