mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
gpu: nova-core: vbios: use checked ops and accesses in FwSecBiosImage::ucode
Use checked arithmetic and access for extracting the microcode since the
offsets are firmware derived.
Fixes: 47c4846e43 ("gpu: nova-core: vbios: Add support for FWSEC ucode extraction")
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
Signed-off-by: Eliot Courtney <ecourtney@nvidia.com>
Link: https://patch.msgid.link/20260525-fix-vbios-v5-5-e5e455251537@nvidia.com
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
237c252be0
commit
7c62d0b006
|
|
@ -1110,16 +1110,18 @@ 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;
|
||||
let size = usize::from_safe_cast(
|
||||
desc.imem_load_size()
|
||||
.checked_add(desc.dmem_load_size())
|
||||
.ok_or(ERANGE)?,
|
||||
);
|
||||
|
||||
// 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());
|
||||
|
||||
// Get the data slice, checking bounds in a single operation.
|
||||
self.base
|
||||
.data
|
||||
.get(ucode_data_offset..ucode_data_offset + size)
|
||||
.get(self.falcon_ucode_offset..)
|
||||
.and_then(|data| data.get(desc.size()..))
|
||||
.and_then(|data| data.get(..size))
|
||||
.ok_or(ERANGE)
|
||||
.inspect_err(|_| {
|
||||
dev_err!(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user