mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
gpu: nova-core: vbios: use checked accesses in setup_falcon_data
Use checked arithmetic for `ucode_offset` in `setup_falcon_data`. This
prevents a malformed firmware from causing a panic.
Fixes: dc70c6ae24 ("gpu: nova-core: vbios: Add support to look up PMU table in FWSEC")
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-7-e5e455251537@nvidia.com
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
25ad950b4e
commit
051ae1b21f
|
|
@ -1036,14 +1036,15 @@ 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();
|
||||
if ucode_offset < first_fwsec.base.data.len() {
|
||||
dev_err!(self.base.dev, "Falcon Ucode offset not in second Fwsec.\n");
|
||||
return Err(EINVAL);
|
||||
}
|
||||
ucode_offset -= first_fwsec.base.data.len();
|
||||
self.falcon_ucode_offset = Some(ucode_offset);
|
||||
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");
|
||||
})?,
|
||||
);
|
||||
}
|
||||
Err(e) => {
|
||||
dev_err!(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user