From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012065.outbound.protection.outlook.com [52.101.53.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90FF53E51FF; Tue, 14 Apr 2026 11:54:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167667; cv=fail; b=e/3tR6yOvYuWwt2Ioe8+884Q9tSP+Au+ljgeSpWea4AiOIEsVFPyN4d6+e3sj1M8AIXxp6Po8z2zuL4/pFGIE1YGwoFYqLfgiS5woSsy/SO40UgNXL4hm9S97alE0XGEkmiAa2tLI7lOQrYAXphjy4CRShrWz2QDjxtHJZdDjHQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167667; c=relaxed/simple; bh=4+YwjQH6ntchRbL/heWlGm69pUIIbUHL7IcGGcAHerM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Pmn3OCIbWP8E92U6pC9y8RH9akEo++njnDC+es079oS2F4CPU4BcOEvIpEKFAaFCGbJaVv8SlXFknCyEcQJy1+u+bC4omZa2hjwuuxYZ6Y6kZvsnk8tHq/1VlAH3Uex5vAdO73mztllMdQ9rc/bjKViItNe0OuPBMQtLxzsPL1M= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=YokAqR1L; arc=fail smtp.client-ip=52.101.53.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="YokAqR1L" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AodgEtJZtiRGTjw3qmNpgoLgiR0VF+yaKROBHF1SQ6E70tFGlhQ1TCu7teBPg+4xiy0ydtn4ADXxr2sKc318ff2umhZQrDac5T0n7moALqOwok13p+5YHrkGQV9b7S1OyHgPKEKHmgkUXMAQ2vRwqTYD+gXwNG9VbdAmmNVar7XVbhnJkSffabHkewpf9BtmaIyVOIk4OpfUVDjC4DneFiE4GTLjAm/lhyRXj56AVHitLmRJEZkSCIaP3INfIpJAMQP9rlmhfWxqXDYcUufebsz8lY4JgsWluI7hOKJPpM+sTW6MhttQu0/Hi4Qy7wP+zmzvVeOB6F0PG29EIT6Abw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kmnBV8B9jQCKjM1UQz1hof5IHNM9xMnmrpvWclye9cI=; b=TjFVFltO5T59KEgNh4GbrjAfK1XEEY2qMV+3S7xn8iT7iRAjCE1JzqIbQnpCl/vnVxJ8YeRcUPbnh+hGAAfbIUHgX4Gm6z4W3YvNGMmco2BBqpBGLGS4wJfO+GK83uFlM1lz0tMEUEEkZNHF0ufrQ39QQsSj+MfS9ffSyD/m38lsUvn5C2XYEVLWDleKJlV3CbOAuxLISiyoGDD/XUI47TrbsZjh2GZAth7PmFKVWZOGuDCI/c1J2gF9avJl7h8JAHJZlM+y6lVVRePVEXkYQQTtyugRbmpRvsvwo1lcriudyD+SKtDPBAsrgK3ZsZmJKstZenrlUscnrZS1Nuq3TA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kmnBV8B9jQCKjM1UQz1hof5IHNM9xMnmrpvWclye9cI=; b=YokAqR1L8cHdvJFfCImxsUY67n0VrJkzYO3hjBz7ENLAzfhrsOy+9HXhshJDVf8i73vkAvH6VPC5oPBHTvWw15xOgq2s9xXSjFR60JFwk0DeAsQWOlSTnfmSkclBEqM8JLLuNliLKUFBDD/Jj2rlAz1CXcOlOL8v29TQW3u6UaLkreTioS7HpB5ABV0UO9cpqMntSUgD1AtZlk2/6Jkea4mM9dOuDJZKDqbC22LQJ+mzVpRggYqc8K/Tp0sNKi9jtwjOmX/ze1ZqAGIOCx6QeDAhpMHtY+G9f60FcrAVDNBdfXi7n2Z7jsz/5NA5lq8FyV5eMbiWDeiFT4fHN+Xo9A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:21 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:21 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:04 +0900 Subject: [PATCH v2 01/11] gpu: nova-core: vbios: fix various cases of reading past `BIOS_MAX_SCAN_LEN` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-1-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DB3PR06CA0021.eurprd06.prod.outlook.com (2603:10a6:8:1::34) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: a02c8731-5aa8-4ccc-0dd2-08de9a1c90c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: vMeGwN1KCU/8O+mb1/gNn5o6REp9ONlyB6J2ud7mKCurjNB4fCJ8/NXHZOISX+1/pbbz2PO9q6Tpr7h9QoB6xUTPT3uUB6arz93K+LwrfvolDwodXrxaZx5sPK9of9kxRI2FFkaDp0Qy8cBI6LiZH9kco8Y9qn25UrLwcZxg25jvNByZ6cuLKs7wjnnE6CNxGXlpIcE3LwMIYnMayaG/j/+iZ1u/n8VouVBKjupveRfF4j4wTBkcJjHF3S4HUzsFsQMcTLSKNIlcdSUxkxbGxpaiez0RvVTvsm2SuwUO2hGwWp+pbHXzL2pU5zuTUoW26Is2WdU5N5B7MhAcyQQyq/cEylrfpwuEUU+mSYMHYLh+jd78OmFbSFq1Emc9pWITzgF01UX9buepHrDdLfim4nilmZOYZpdqj2SC1UogUT9n0WREp7QnCerptppqDDHWax1Hz9BstnKl2Vroq2CwZDAcRAODowb5FzvplOolpPlo4rRYPa20S+I47dlT3Oweo0+5nJp4ISLNP/htm4zNLRe8dKRm0VBtopvf5h7o707LdXXHa9/TmMEsiIgRS1R+vWMUja31ZDnvnSVVzStq7RveATBFoix5HU2h/7aQte1JqItGBUqe8t0QQBWIrkmCuNBjYupYCW7tSWZs4JyBI0IDZ2LNv3S+RBR1BF07WeG1N7IjJktw3zDOGrlBFpdZxd/myaUCX7zfm32EazZ0WvNGNfwcjhvZj/QBgt53nVA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YkJJVnR2UVNKYVFva2dNRERXN3RPUXdvMTAzN0pWQ0NUOFF1ajBnSlplZzVF?= =?utf-8?B?TGZHRlovMWRmUmYySkxXL0p5Um1LWVVhRnRySWV5RVZmYi9scTFodGNVNEN5?= =?utf-8?B?SHdYOUN1blRYQWdGMEtncloweVQ5WUFZRFRoRTB5V1hVNVh1ZmRhOHlFMVJH?= =?utf-8?B?ZTZ4WHd3T2JHU1FmWVNJMDYvb2FQZ1MvWGk1dnZucHVTdDNYclljL3J1cDVK?= =?utf-8?B?SmxSa1poUkpRU2cxaG1SMkxoSEVxYWNPL1dSRDFBMHBnSUs3R09heElNcGE1?= =?utf-8?B?ZERPekNVMkRyWGYwVHNGTTNwL2Z0UW4wL21uTkM3cGVUQlUwRVFlaytYVnJV?= =?utf-8?B?Q1MrYW5aRUtJS2JkT25HcGkvQUhOWkhjSE03UDBkQVYyRTd1VEdsMmw2YWg5?= =?utf-8?B?RWJtNFRoOXlMZm51emtWR3FTWm5ZVUwrRHpJTDVUWkM5NDkzZ3pkeFRnYUNR?= =?utf-8?B?U0c4V09XS25IOEY2OUg2TDdZazVDbEo3SGs2cExUNFYvSDM2OGxFYVZuQW9W?= =?utf-8?B?S0EwNG15NmJ4cmFVbVdWeUNwZ0dUV0NkcVFOUTRkVzhUNHhxaEdNSzhYS0FV?= =?utf-8?B?dXQvWmFueGJDK2pzUURNcjMvYi9DZlR6aXZUS0crZFFuR2RqZ3Y0MVZFZ3Rq?= =?utf-8?B?OFl6cjg1dFArMFpPUWhTSHRUS3pXSzN5ZGQ0U2wrci9TdDZwTU1mS2JQU2hw?= =?utf-8?B?Q0o2eGlDdStrUzliLzVrR0krN1VPQ1hmVjJWNGRLS0dBdzBHNkhBN2dUclhh?= =?utf-8?B?Y0tReFA1ME54cVV5NGQzWUFjOUFKMVp0ZUVhdUtTL1YyZnZPYjV5ejVHdS9B?= =?utf-8?B?ZzJNMmh5Z3lQOW5oaWxSMElPemU2b01zR1o4cjRaRExCM25qK2hRQUg4T2lJ?= =?utf-8?B?c1R1aGhLbzFSOExkOXlMMG5PVnB2UURHNXIwRHJLRnlSV01Kay9lOEZOZmNy?= =?utf-8?B?V0trd3BTSTBjT1dsME14RnFwaHBtUTZlcXRySmZQeUprWEt3Um0wRnRmZ2tp?= =?utf-8?B?aUJGYkNwWHZBcGxCVzk4QzJFSE9KeEhUNW1GYUViZGFDekNteWdpNmlvdm1u?= =?utf-8?B?VkNNMnVEWDZhTzVUSkdpNisraGFCaVJVQmV2SWRxUThZbGVqMm8yYjY5N3RV?= =?utf-8?B?RGdJZlM2WjQ3U1NoSTV5cDlNVTVmaDRBV3lTZThkSkplQXRXZUk2VHNCYWdL?= =?utf-8?B?VS9qaGdhYmkyTmduRVI4NzcrOTk2bmo1R0NoUFU0dkt4ZmlxeVBzY1hqRzBS?= =?utf-8?B?ZFgwQkM3U0RMNTl4ZDJPaGtuenlOekxZTElyQzlMNDRDd1B6UVJIMmowRWJZ?= =?utf-8?B?Zzg2ckU3cWFITW54VXJGMFdDckozQVAzYmhlNExaVDBnWkdqdHBrd0gxaFFZ?= =?utf-8?B?VkNQYlJLUnJnTW02MCsrZVRDcHU0aVdRa2twYUxYMUtFYjFyeXhqS05QYzc5?= =?utf-8?B?SDhpREpETHowak1wOHJLV3pxdlpVVkwrTVIwUTJqUFdQWHV6U3BYOUxMM3Yy?= =?utf-8?B?T09wZ0RRQnh2Mm40M2ZqeWdyZVMydnVCOURpeFV4OGNBYnpmb1F0K2JZUE5P?= =?utf-8?B?N1VRMjcrTmtQSFI0TTgyOTRodXF4UE1EMk54TzBYWGtTQ3ZvRitQSU9uWlpw?= =?utf-8?B?RWV6ZXpDa2RaZ1ExQkFrWnVPNzQ2RmsrTEYrTml2ZVZtQ1l1NGxpWFlza1JY?= =?utf-8?B?eldhQ2c2Vk5Wb2VzUkxQa1V4WG1IRHJxZ2t1UUE2MGpab3JrMTVndWt1RUNR?= =?utf-8?B?a1NzVGQwUm9nT2FzeVUxM2dHbVNBODVNSis3ZjNGemdiL044ODJCZTN5dXBu?= =?utf-8?B?eGpKMWIrdnZaamVhU2g1WlFjaStBYStTclBSc201VmRKT25rOHA0aFlxUG9W?= =?utf-8?B?eXM0TjBkdGdZTmNieDlZNHJhR1pxY0dUc3RpTDlZQlpGT3ZzVkx3MHM1Yngv?= =?utf-8?B?a2xwWmxCR0x4YTBTQ0liMTFwY2k4UktGeHJ5bFFCVklJYXl3TDd6eG9GYnoy?= =?utf-8?B?RzJSMzVsK3JKekpZdUp5dS9LWnNSOTRGVEd3VWRsQkJURHg4QzZ6TmZDcjNz?= =?utf-8?B?bmh6VG5xcmVxcXo4bDJsR3pEUEVhTDhqNzhORkNGWm9Lc0xIVDRCcXI1UTVs?= =?utf-8?B?NTZISVJWTk5GanNZYjRGbjFHbmRlanpJZ0tzRlZQMWxyd1FsRVNPaXMrWjN3?= =?utf-8?B?UFY2YVJWSnNIWFFOZ0FScGs3Z0EwWjZjNDlMYi81MWpFY3g2dFBrNTQ0bWJY?= =?utf-8?B?VmRiNUh3dkFTNE5hZFFMMW96WGlwQ3BkM3BuRGtZczRoY3dvVUVab204REJi?= =?utf-8?B?RWl6SDRURGNaUDhPZVphakptOE5QZS94QnhXVUtkZ1hVMElLRmZFUTlmZ2Qr?= =?utf-8?Q?IrO4eTAD7dCCaD8ygu1J3jj7hL1f1Wd1RIggvx0QCjPsG?= X-MS-Exchange-AntiSpam-MessageData-1: 8RB/izqWznmbQA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a02c8731-5aa8-4ccc-0dd2-08de9a1c90c6 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:21.2842 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fhGYTUJ7/eomMpdf3xJ/fNoGQ+Bd2sLAy9mIBj8mjdBdTm7G71SxohkSxHyFQnGkEUnrWOGksbHyN9e/8/B4cA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 Fix various cases that allow reading past `BIOS_MAX_SCAN_LEN` when scanning the VBIOS. Fix bug where `read_more_at_offset` would unnecessarily read more data. This happens when the window to read has some part cached and some part not. It would read `len` bytes instead of just the uncached portion, which could read past `BIOS_MAX_SCAN_LEN`. Also add more checked arithmetic to catch potential overflows. `read_bios_image_at_offset` is called with a length from the VBIOS header, so we should be more defensive here. Fixes: 6fda04e7f0cd ("gpu: nova-core: vbios: Add base support for VBIOS con= struction and iteration") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/vbios.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ebda28e596c5..6de7e58e0da0 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -132,17 +132,14 @@ fn read_more(&mut self, len: usize) -> Result { =20 /// Read bytes at a specific offset, filling any gap. fn read_more_at_offset(&mut self, offset: usize, len: usize) -> Result= { - if offset > BIOS_MAX_SCAN_LEN { + let end =3D offset.checked_add(len).ok_or(EINVAL)?; + + if end > BIOS_MAX_SCAN_LEN { dev_err!(self.dev, "Error: exceeded BIOS scan limit.\n"); return Err(EINVAL); } =20 - // If `offset` is beyond current data size, fill the gap first. - let current_len =3D self.data.len(); - let gap_bytes =3D offset.saturating_sub(current_len); - - // Now read the requested bytes at the offset. - self.read_more(gap_bytes + len) + self.read_more(end.saturating_sub(self.data.len())) } =20 /// Read a BIOS image at a specific offset and create a [`BiosImage`] = from it. @@ -155,8 +152,9 @@ fn read_bios_image_at_offset( len: usize, context: &str, ) -> Result { + let end =3D offset.checked_add(len).ok_or(EINVAL)?; let data_len =3D self.data.len(); - if offset + len > data_len { + if end > data_len { self.read_more_at_offset(offset, len).inspect_err(|e| { dev_err!( self.dev, @@ -167,7 +165,7 @@ fn read_bios_image_at_offset( })?; } =20 - BiosImage::new(self.dev, &self.data[offset..offset + len]).inspect= _err(|err| { + BiosImage::new(self.dev, &self.data[offset..end]).inspect_err(|err= | { dev_err!( self.dev, "Failed to {} at offset {:#x}: {:?}\n", @@ -189,7 +187,7 @@ fn next(&mut self) -> Option { return None; } =20 - if self.current_offset > BIOS_MAX_SCAN_LEN { + if self.current_offset >=3D BIOS_MAX_SCAN_LEN { dev_err!(self.dev, "Error: exceeded BIOS scan limit, stopping = scan\n"); return None; } --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012065.outbound.protection.outlook.com [52.101.53.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC9143E0C70; Tue, 14 Apr 2026 11:54:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167669; cv=fail; b=tDnoLhdMG7M1zK9teKjdlVDBu2IuhzFBv/oUePXNZm/vqSmSikm79QUAmDAmMEz1gm1wfCsag0sEnEh3SEZ6mSKK7/z5yJfiOB5HBbVXaAfOiuqfT4C0QfnDttHHGDmjGbcMGCZx1xUaPSHvBCfwsgc6necSJLG+D5QDE6diRtM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167669; c=relaxed/simple; bh=hu/utQFqd1U4q4pAluI1OdjJnVvrbTl3xUin6NcqpLI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=eWaUKMk1/sCuJXZTn9lZVETFbPs8FwTWs+P02w8NKfvBHAUBWkc3xuUkIdf2P+Vauvgt+S8JgeSN8WDQYlWkF8f08rC1H2u5mnwV67lZhy73s4r4dMBoXMWS/FHkPGU3yV6lCJ81AF1pO1lGnI6MKAv19bJIWaw62Q0xKyD+i+o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Mxxcwx2x; arc=fail smtp.client-ip=52.101.53.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Mxxcwx2x" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LDlWpwo5Zhld8JYMUh0N+mQE0/2oYH0qMk2r4GAWxrbhnDCuY/U8HLvol5R1Uqla56o4H/83BkQMZnP1cKvhGWXTt7JH8cOR/+FDKpj48Itwzu5v/0SsX7oDfAHbqB1v2CfEJJCjoj/tX6g5WdBx8duTmOJR+ytrYsIo9JUdsPAZwqRP+f0SFi26PpNzxdr4h5IgG6ABa560ByQf7EvzQrSy3Yd5VxrQBgHbUtLsUMF6wlJXKIUQE2UkoIq+MzEyi7j6Vl/GUDJlKjcN+VUUJlXaVvmLdBJKJR6QXWQoJsMXGBtBVr2fHuNY3jA7mEneeO7FbJx9Rtjo1Kb1E6btDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3xe4lj25pLelHhHRVrinfyrwKL37xLXF4CF5+fweIzk=; b=mYh3k6R7a9cJ5yVUeYHirA/QurbRLnBhT5dVjmLnhxXW0elqgLAm8GN0EDQbjLKN8Ugg//zQ2RiSTZrD1bDxvSvlizCJYCqd0SvlCoPJTW7PRFRTZu261/uKocvzG0THUYcdRB/4kO6ozrfuUI5d3mO4kDITJKLkY3bhEPORtJNzz9sOrxYSHo0FUD85pkie/G7zKn5ZJfsXgXdxZo+t2Y1cRN/O16iM56aV1ml6o4xlcSjMyRbuEBeGmIr5FXQRQKG/L8HQLGd4q8DIsLtMEhJ8qQgD+KQeH0ybMKKGherEwWNK4JtkNwW0atgm0EO2/Z7xz0y68Yrg+XUkJIHH2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3xe4lj25pLelHhHRVrinfyrwKL37xLXF4CF5+fweIzk=; b=Mxxcwx2xtfN2VMbI/D6EZEhmHCnGGk6R4mpwLl1JGVMQZIqOuBPPuqBFPZHovYuN4sJ+1rstzPBYU5P4ZKrZnbxufPOedQ/EVcr0QIuEwRCTQEdCE3Y6ICOKqXvn+eS7Wd4sU+IX9arbgLTXVEYCACU+n14OKVUyJjRc4baN5n2lml1BWmnbvku7JI5hDaMei8++Q92B3b+E9+/qRQKJBWv/VhdxxgVngGhkYXSDELrZOc+irhV2uP2eD+lWrjR8r/t2pKR7fNmo8eEgMrzFojfMW1I5uuHLIzKmaqxIOdtYbqdyTGoU4lqWDVmIT4FS0TQybDzXTix+JvtPnILdWw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:25 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:25 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:05 +0900 Subject: [PATCH v2 02/11] gpu: nova-core: vbios: limit `BitToken` entry reads Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-2-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: TYCPR01CA0128.jpnprd01.prod.outlook.com (2603:1096:400:26d::20) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: cc97e962-f8ed-4a2c-2d6a-08de9a1c9325 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: PO3H37LPzUP7zO1OXx/NezzCr+0VZ3ZQUOn9G2R5G5rziQnhaTiOYxTV0mELWYVDKJHCBZq16nd1E23QvKOKETv+NppU1GhCAgmMQUXdqWAGlinse7bEXH8tBY9HwEZUwKBnGqmggz5b39slPuxU0qWP4HhAal0Q12bDkEPaLeDb5UStSYDJsO4jj6vYOTKN5j4VtYXhclky8fzzont9xzQA+/dQxxYnf12+MKh0Sw7DjdIvEyqIXDPVG+jcI2EJ50JJYv7dVnh3Dwt3XBk/l9l+Aq0vKvR/OJDDnIaWwTm8wwPKTfNI3fsUR0xZyFRWHNku8JhC8uRVghGiKSeyfH3zTnOYS+I2UYQJIgBtSxnogrzunLX4KE7e840EgzS5oDA9FgvP08ixVmIRegJgDc+Cc0Y5JgwnRZvQ8xyPtrjQerWL8hjF7Pb9mC7WFUXiE4Qk4fLAckwOZ+vdGMUHXXO95QbEXr9twNtAguqGRMr6j6abWaDXWZohGsJzSXcraPPQ0y+RfU1mpNW06S5cJbQwlzt+W2PriFbhINHYwC3EbuVmC6e6IT7BoyeYMGWUyZSJra6ftCrIjV1ojOYBg/R8kujEnPLp4mBZ5WVkmTiEoTGX3bdH3+0tjA/Dy51wcSjn+opvx1EagfUIQp4uDxEgrytz6F17kOIjzfiT2QporIsE3/CC3X2geG0pmWGnXvi3CBV/117KJkL2B8juZcuLnUa0eYSLRa0q4GAcntA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2gzQ3U3RmZNM3BwVmg3MjRvYVlNZVA5QkgyZUNPeTFoZG8xRUxIcWppY2VX?= =?utf-8?B?a3o2cm1ZU1NJR3k1Ym5ScjdHQThNRW9BTEdMRkEvU3NZaUl3S0ZMZUhMSDEv?= =?utf-8?B?bW15cUY2bks3bm40WTk0Yit3TjdSaGY5Q2dDSXRxbzgxdElvNWZPSnZhVkk5?= =?utf-8?B?WXYrTGF0ekwyN25SRjhFNExEanJlKy8vOS92SWlrdGVIZkZsS3RUcDB5M2ti?= =?utf-8?B?ZFZEMTB1aHJRc1RQZXVoQ3ZLUFhMR0k4a1c3empKUXduYTQ3ZnV0VVJBb21y?= =?utf-8?B?Sk9yZ1U4bmZEWXNBekJ6di8rNk9ZdE5VeE1oTnlyd2VpUVJpVkZ2Q3BYaEdR?= =?utf-8?B?QUpoTG94Y1hVZzNEM3ZGRzQzenRmY2g5RVBvZHF2QWtFVkF4Ym41WHE3Y003?= =?utf-8?B?KzRuVmNsN1ZnYVVPTCtBTVVjV1ZwTVYybVAxck4xaGZyR2ROeTJVSTUvUGhD?= =?utf-8?B?ZG54T3FhaWV1WHp3QmJVdXF6eFRTVVF6czByY0wwWkI0cUNrcWphdEZDcmd1?= =?utf-8?B?YXIrck1zbHhyeHZFbXlEMG5WVTNPaURVOGxwbmpuUFVjZ3NkeUNlemtvUEJI?= =?utf-8?B?cjdhSVQyN3dvNFpKNEhVZEZXcXZBYkY2YUM2eHlKSW5wVDZOY0hSTEtldFR0?= =?utf-8?B?UVpmZGt4UmF3d0J4V3J0SWhtdW1YMHdQemowZnZUZVBieUx4VHp2U1hhZzd1?= =?utf-8?B?cVd3ZFppMkMwb2MvVVZjMm83ZjYybnRDK3NjN0UwaFhvUEhIdEF1SWlENHFM?= =?utf-8?B?QzFGaXZtVENybzBaa0J4YmpZSHdyMnFvYVNwekI5NjVNWXh3SHdtN2VKcVI5?= =?utf-8?B?NWlIRDB2TW8xdW50amxtOVZBTllZdlFUQWpvbUY0OC83bUN4OW1vbGtUSlBN?= =?utf-8?B?ZUp1SjdEYVB3WHowdnNEOTZ3RWRvYkpmelpUQWpzTGI3ck9DVTAwZWxxeFMz?= =?utf-8?B?d3B1WE5tTVJPTzNHSGdPVzFkTjNUczZPR0dUOU1jQVpiQm1DVUNnOHNEb2I1?= =?utf-8?B?WEhsZkZvWVRMRVZIVEdGeU5GSVlTTnQxUUZnSWhvN1l2VkVmUFlDVi9HeTZY?= =?utf-8?B?ZXZGMlRMRmRuRW1rNllXYlZrRGsxWkM1VUwvYXYrUDBDNFBFM080UDZ4SW8x?= =?utf-8?B?Nkk1RmVSMEdFVmYvQ0s4WW00bm5Rc0ZzZlE0TE83QStLL0hKTVcvbjd1cmZE?= =?utf-8?B?MWEyMnBRbFYxYmNJVmM2UllXTW1UTXpJSVgrRHYyMm14WmZKN2RnTnJCeW9L?= =?utf-8?B?aHFkVkhPSmNERlMyaHVYUDk5azhVOEwrWW1JMDFXbVZDN1Q0b2RVQ1hYL21w?= =?utf-8?B?elR3bHM3NG5uZ1ZnRWZKbWNtVTdHK2JzanJkazUzQlB1Mm0xWXdLZDY2U0Jq?= =?utf-8?B?TE4rL3p1OE9sZldUbmdVdHdCa3kweVJqS2x2VXdhaWFKOEJXN20vWmNWeHgv?= =?utf-8?B?RnVLTnM5ZTZWNzN6SjYxMjhUb3ZrTXJDeng0WCtVbENCQVgwQVV5K1hBeFZm?= =?utf-8?B?QzNxUlZ2ZFYvTVdlVHk2Umpkak5NcTI3a2VibmVza08xSFBKWFR5MEVRWjg1?= =?utf-8?B?dVVhalZIQkJ0ZVNVK3dlU3ExTmR1THhoeHRVZVlRaXlpU3V3eStGRmNWZWNx?= =?utf-8?B?bEhidWkvZVh4aFVPT3pWZ2RhQysyNWtsS3A1ZlRYVXhyS1hkMXNrT0Q4S0E4?= =?utf-8?B?c1o5Z0VQa3llUmV5eHcxYWZNZjA1MDFGRHQ1RmV2bUtqYlAvbHRqTDZINTMw?= =?utf-8?B?OGRwZHVvSCtLekdVRkM4NUtMQjlwSVFtay9yVTlsNVdFaE1HVVlKU0t3V0V6?= =?utf-8?B?MkxtQmNwZGtyZDNCRVZ0OVBwM0dyYTNOdHhMTllpdDRETS94SUFXWHcvSmVw?= =?utf-8?B?UWRmYmdvNFoydm9BcG5LMFJreWdZSU1ON2JWUGJLS3AxQWtkakpjMjNFc2hh?= =?utf-8?B?TFBKVm1IYTJ0Yjd0NVJFNFMyVkQ0bmEwOXBrcVBQK05CQVVtSFZiMWExMmMy?= =?utf-8?B?cDNEVTZUaFoyN0RCalFVU2t1Sk5lWC8rYW1lRUUxRjUvL2grMGJ2Tm11NC84?= =?utf-8?B?UlZJaStWd0tmclBlV2ZQNUtNSTh1UjNvSFpkdDVFSjFqTjc0U1JXRWFKMjlk?= =?utf-8?B?Q3p5RS83bURRV0RwaHdzSXM3K3NCcnNMRFVUd2U2SHVHMmNsendoU1ZmMS8v?= =?utf-8?B?Y0pDYWwyckpOVVUxT1BKQ2kyOXVVVzRiUVB2Zi9WLzExZCtXdmhyMjJCMktJ?= =?utf-8?B?RHVUM2lsZXZGV3BubkFqeERzQ2x4Qld3Z3cremd5UGxYaHJmZkNJaTYzM3Uw?= =?utf-8?B?VFJmUkVZV292VHFsVktYb1RuUXVWWVhFKzY5SjcvaGcwN1VRK3dkUWM2cEQw?= =?utf-8?Q?3URO7yLyKjDRtyDwUSMs+4WkUAIlrTxpHMHHuIDcb+UBG?= X-MS-Exchange-AntiSpam-MessageData-1: c3tv5S8p0zlUEQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc97e962-f8ed-4a2c-2d6a-08de9a1c9325 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:25.2792 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /O72ID9ESLQl5B08udMYsUjPhGLxF4fXTpzTylOxyJrKrhtvFonKfzfxg0guNcCUaJN/RLUyKaOMNl90KmCnJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 If `header.token_size` is smaller than `BitToken`, then we currently can read past the end of `image.base.data`. Check that the token size is at least as big as `BitToken`. Fixes: dc70c6ae2441 ("gpu: nova-core: vbios: Add support to look up PMU tab= le in FWSEC") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/vbios.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 6de7e58e0da0..de856000de23 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -423,31 +423,31 @@ impl BitToken { /// Find a BIT token entry by BIT ID in a PciAtBiosImage fn from_id(image: &PciAtBiosImage, token_id: u8) -> Result { let header =3D &image.bit_header; + let entry_size =3D usize::from(header.token_size); + + if entry_size < size_of::() { + return Err(EINVAL); + } =20 // Offset to the first token entry let tokens_start =3D image.bit_offset + usize::from(header.header_= size); =20 for i in 0..usize::from(header.token_entries) { - let entry_offset =3D tokens_start + (i * usize::from(header.to= ken_size)); - - // Make sure we don't go out of bounds - if entry_offset + usize::from(header.token_size) > image.base.= data.len() { - return Err(EINVAL); - } + let entry_offset =3D tokens_start + (i * entry_size); + let entry =3D image + .base + .data + .get(entry_offset..) + .and_then(|data| data.get(..entry_size)) + .ok_or(EINVAL)?; =20 // Check if this token has the requested ID - if image.base.data[entry_offset] =3D=3D token_id { + if entry[0] =3D=3D token_id { return Ok(BitToken { - id: image.base.data[entry_offset], - data_version: image.base.data[entry_offset + 1], - data_size: u16::from_le_bytes([ - image.base.data[entry_offset + 2], - image.base.data[entry_offset + 3], - ]), - data_offset: u16::from_le_bytes([ - image.base.data[entry_offset + 4], - image.base.data[entry_offset + 5], - ]), + id: entry[0], + data_version: entry[1], + data_size: u16::from_le_bytes([entry[2], entry[3]]), + data_offset: u16::from_le_bytes([entry[4], entry[5]]), }); } } --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012061.outbound.protection.outlook.com [52.101.43.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05578377EC3; Tue, 14 Apr 2026 11:54:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167673; cv=fail; b=YTKZYHLOvzyxYs59ot/TP892CoJblb17qvKhIzA5luRz2Ixqt0fwOrYk6v4FkF7R7gXl8Q6UYos79xgyniTCVJj9rzimxDtqA/jKFjJP3rg5Vm0XrqWqCpggXjKBqTMZQ3F4ZGkh5n3SqfAkwPBi82E3HfL6TjZcQaPgCXBIPYU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167673; c=relaxed/simple; bh=W4tbyZ6Y0omllL9rnCC8XVkoVNnyYqoqflnp5Xt/gNc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=aTxGzftXLaboXte3LC2HVcAxCfx/PlOf5bi98DNRSPrnWa+zEesw9beaaIrQnaB9MEJNtELCQH4xce25IQZXGillpM0H5bozt8mCYtiib0juJeZ065/qno6kVPdVEFxZthU+iq15BpeazDEKNORzfUR370RXAFWx8zHOflHThU8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=I9Uc0oTD; arc=fail smtp.client-ip=52.101.43.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="I9Uc0oTD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SaztHHogfPvs9HDADL6Y9pia/G35Lyghue9ItQRc2FSijzMT3UwGGXvJLBgAyODFDHilS5N7BrpAoXxS4WR6f77E9r7DkyT249k84cLZmn/ugE8mAJCjoFsXES2z2ZvfxCcCNvMXwwyJYElSPAR270lgcLkH6AT9fgTLwM3jX/QgboQYSx1oFI48YAwM2nVTkoEWEU63zlGkdJx59K20UJZMUoM1HIPHUFGSvt+Y3IRcsAf9xaHBlntul+4U1tbwt5okcxhpQBBJ8ClQN9zQe65vcdieVytMDsjDgpFvJKjwkdD8EFOiCRbJcS/8+lmByg9Uset0aexlY0GtyPcV+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=FzJKy9nr8p/NBiGBqymBpLYwlO0WKKIv69Wsf6gVICY=; b=rqd0xGeX+ChWu3udTNzFncvARzNOGWzuPRUePoF3Et/XcwOg+xmlYDbBrjnK9RpjCsNf16+elsSHVcWvo2nXZGzfViWLxUDDFLRGEtYRs+IFzum2xtiDKr9JB0vW9liOdYIlnjT4wCCH+I873vkPGTEzmK0RQYwvtgtEaYjFgJVnLCpb8DKcmaSHlKgaB35Fsjm2qhvi8usYL1wcxnvYbT70roUs0wp0EmZCfLC0JDtU+WXxSJvOh/kAHArUzU1J6CLtOSnPe5dvVVmE0+1y95ELXlzdaloTTrTm2NDzAuRppG68p1F6MwBj8ZKXYEQMTDflGkTN9GYVG1MdNN12mA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FzJKy9nr8p/NBiGBqymBpLYwlO0WKKIv69Wsf6gVICY=; b=I9Uc0oTDTpbcsl2HqUMQAkghgSssI5xWPnCB0bwY+y2Uq80vPjKmCxZKNuX+VPH791WqM923KqVKV41iHmcMv+6ifZRyZXRMy/XVIXZVBot1A11pI3bxXtQsccli9nXM+PY+skj27HhEDg7jnWq0PsdwrSad6uNWk6dr6Nc+CmzWxqxM8gGLC6Irw6rU1rliCSXiLd56C8wPatYhMgNcSAZSkTYSClXX+IEORajujNsZaz0MKdIU82WNbM0Z8RYGP0uY/S4SwreTVCTm2ykpdmMVuph1HKyunaZkTe99jDAcxPFHdkHEZZ9SCXm9xsyuJpdUIZRLVwTlvCCVIvzHyQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:29 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:29 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:06 +0900 Subject: [PATCH v2 03/11] gpu: nova-core: vbios: use checked ops and accesses in `FwSecBiosImage::ucode` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-3-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: TY4P301CA0108.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37b::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c48ce97-d9cd-40a6-530b-08de9a1c959f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: kRTEL9LT/olvN6t4nPAEcLcfh5kvZzkO95h04pohP1X3s2uBIi2FGsO3XwVXDSYdznEvGHxCa1+2okXuYGsMwAMqn2r1LUf61/58897kvdMh6CP/le6rd0pQFl224eCXDt14IYy/yPKLhGTsPcrGHWiGjjqpBn/jVzcVPo6+2JPqjMfUADxqGkGoEfk3iL3+2djznE+u7QWHVKQYrkJi9Z8GyByMAN8deVjZzIv4tg0ENaifGW8JB3VL6YFp38hJq+BWUM2Bpv1RYymSkEmplkyS/qGDNyCAbc3QLXix2CRNVyjb6fQjI/73a+SC4WBbuWe5iTZUL7mRkK1ERiWaTe2sgFG8vooML+JrctmUNImJvHquQjVtno6mwDr1z6zwaz2qxS5KDbAOseC74/bFwpklBCwY3/DAWt1SrThF+JAlnvF3Z+8/h/w05FQphN2JLZx851gLx5E2dctRDd9oiW0d9y4UTPQL+GXZo8LYXa3KTUVpU6mvptpKvs/mBwyq6hDWAbRD758uCE4i7MMXhCufo0sYFKlJqyfEm9Sa4rQHTS+qQjmKAOf4s4KNx4R66+WWmue9avnen3VCFUir61gtGicBSxzSXZERtm8iXgOaj6Z1bm3QEoe3LNa7ZZlFFzlFM6zz6tPqHLd0Y78WXYa/RKirkYawb6+tBmcgJ9eWeJ7iMPuGTuTCG++qN6eL9CaMS8lYzQMnmJ8oKiLw8cwzx4jrYM1FE9p4eAmfnWE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UGkwVE5hanBtdGI1VVRzcUlPR2VFVHMxTk14UVBvaFE1dnZZakkwa2lucTVN?= =?utf-8?B?MC92MTlEVDZ5elZ6bityOG5Dc014SzNCbDJFaStwZkZ4U3ZlQWdPTFYvcnVM?= =?utf-8?B?TlM5eVZwVVRvWWgzaEFzSjBPWXVkbkFBcUR6OUpzOUtVTURyZHhRY3VIbEFC?= =?utf-8?B?dFdMRy9XdVI2YmthNU5PZUVpb25PbC9SdlkxTFNjTHY2ZXlSalltMFB1RFI2?= =?utf-8?B?WUpMUTd0SVBPZURFNDBVWmhMRGRxNjRxQnA5SVJJaVZQSnhBOVhBVnBSeGFS?= =?utf-8?B?WVVBQzI2QUo4ZmR3dG5vWDdCMitPVXZaNEtUeURLYmRZdHdIc3NCaTkrWFVq?= =?utf-8?B?VHBLak13YllkZzd0SnE4bmxTZ1B1b2FFM29ZRy9EQURhZmN5Mng2Tlc5eFc2?= =?utf-8?B?SCtIZVNJQ0h5QkhRVlA0Sy9tZTdreWZjKzU4cHVTR3R3Um4vRmYrdVM4SDBm?= =?utf-8?B?MGk1KzlZWVU4cFZ5VHVvcXN6bWhyQW1GQnkvRnV5c0N5bWp1Nkh5Ni8ydTEw?= =?utf-8?B?dHoyWm1NVTlwL1cyTGpYa1dwcEtQQ0ZPOFFCL21qRFg5MnpZN0tzSnh1L2Ew?= =?utf-8?B?K2M0aTl2NldTUHUzRU15Z2pxeXdrUE9tbUROdmxBOVRReWlMZnRKbnNTRzd1?= =?utf-8?B?UHk5aW11U0ljVkhDeG9zdnd2NHNyUVpjcE9XT0Z2N1Zyb3ljSklIemU5UkdJ?= =?utf-8?B?N21CVWZHZ2lVWHdRVnRnSUdNTlRSN1dpM01xYms3RzJFR0VnT2Vxek5NcDUw?= =?utf-8?B?NTFpUklKRmFKSW9Jdms4MnlqTE1pRTA2WmR1OW93UXAzYUM3K2hEYisxL0Nz?= =?utf-8?B?ZEg3N2tFcHdRaXdDYzZNR3AxM1JLRVpkRUNJSVQ4VlJJazEza2R4a0cxZGE5?= =?utf-8?B?SU9sMWxFSFJ2NEZXYmhESnkwejFiRWFQTlFWaEJZRmYzMDFBVXh1d3JXNVBZ?= =?utf-8?B?RmtWakltTXI3UFUxRGpLU1BCS1ZjeTJvbkdhTXFPSnFZcDlSbFV3VTlveFpP?= =?utf-8?B?R1N2WnNkSmlicUFFNldGdHF3UnRoL3llMkttWllZV1JQUmp5MDg5TlRNMUNB?= =?utf-8?B?Wk1DdUlpQlNGK3JHTDhmdWphS2dPOG4zQ3hsRzVNeUZEYzFVRDRsWVNzcTI0?= =?utf-8?B?eUZmU3FvMDErTGY1RzVZZUd6TTBQOTBZeEdvSkx5Q3hwR0QyeWxEVGRtSVg1?= =?utf-8?B?cnJKb3ptYytrYmdOSlhsOXFnZERsY3dkNEZjZ1pLZnczVTdZd05QNTNYd0dJ?= =?utf-8?B?eTVpdWd5QmFkUXU0RFdvUXpIelpyTEhrTDhtcjkwU1ZRQVNUZnZCNkhJYUg4?= =?utf-8?B?dHZPNmpNejFmNWsvbnN5T0NYbWEzWFBHeFYrWjhxMVdqN21nSEduQWtwQmdB?= =?utf-8?B?bkMzUTJNR0pSalF0dGFhbE52TzlwWm5zcFlSc0kwMjIrNmtsWDkrT1NpcHFr?= =?utf-8?B?MHl4bTRuK2FxYm5vNDFrUEZKbEE4b25RL3pyakttS2ZjN1VqY0pjUnF1bS9K?= =?utf-8?B?SEJqS0d0eDJtYkliU0M2bElJNWI0bUVra0pITWdZQ2pKSlFCQVR4L1B3M3pW?= =?utf-8?B?dWpPbHNPSjlUUS9qOEdFY0pzclRYejBoQ2ZtWWh2SEpXcU9aRjNaWG9CVkJ3?= =?utf-8?B?d0R6NFMrbngxaUE1U0ZOSUJUSmF0YnZBc0ZUK0NEK3hwMTBLOUpDYjdRZEVv?= =?utf-8?B?bnUvM3dOd1VacDV1ZG1HUGVWa0lnbVNjOHVTUXhsMmV5R01ieFBlZHBoeHlh?= =?utf-8?B?djdwTGFiZy9HYURWanpJVDJoTjRTb3o1Wlh5U09IRWhNWXNhM3h1bU4vWm5Z?= =?utf-8?B?S25xOWFIcmxOMzdsWUdJK0Y0KzF3QUlmN0liQ3VJaEtHNTkzYjFvaFlVaTB4?= =?utf-8?B?a1NYOUVhRXFTNXd2YUNzMmVHeVFPaEttOGdyb2oyRElIOW9qdVQwejFHSEht?= =?utf-8?B?WTNDMHhCdnVSZHkyWmlhWnRWaUY1UVVNdkJmbHVRTGd0a0RHYU5wb1o5OS9K?= =?utf-8?B?VUZlN1VaT0pOUWpKdm05cDEvUi9zcXo4aVR0S2tFN1pLZ3E1MXFlMjdTQnFQ?= =?utf-8?B?dzlVTGZLME9wU0hPcVJQOWxsWWpLU3JBenNoem9saUpMMER3L2Z5VkVNK2kx?= =?utf-8?B?UllpU0R0R3ExUm9OT3pPUEc5Uy91L3pjb3h6bVVCTW5vSHQ5RVBYcWx4ZTE5?= =?utf-8?B?QUtPMWloVDdKMlRRdUU2S2hPUWZxZ01Hek5sSGpJbllwUHlpMFl5MTIyTlBQ?= =?utf-8?B?SWJZU1FBbFdrZExPZUNDT3NNTEllN0JzK3EzZ21jYTJ2ZUJZZWZsSWpYMEYv?= =?utf-8?B?TFpaQkp1dW1CZU5NUFFyUmRFLzQzcWpSUldjNjhzb0FnWlZPYlg0Yk5ra09k?= =?utf-8?Q?7LZiFAQ+2chmqY7nBJGYPYnaHIE1Y787McDx1m11fnYwb?= X-MS-Exchange-AntiSpam-MessageData-1: Vge1Um5fkm0LRw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c48ce97-d9cd-40a6-530b-08de9a1c959f X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:29.4256 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VEMU+Yy28cOTdGM/k/9CQrCcnJkMm1OFwXb0Igd++bBzQ3cpPacb1aTGVpmJB1N9OW7aOZoiLhCrO0GKjRmchA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 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 ex= traction") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney --- 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 de856000de23..632c8a90ea76 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -1029,16 +1029,21 @@ pub(crate) fn header(&self) -> Result { =20 /// Get the ucode data as a byte slice pub(crate) fn ucode(&self, desc: &FalconUCodeDesc) -> Result<&[u8]> { - let falcon_ucode_offset =3D self.falcon_ucode_offset; - // The ucode data follows the descriptor. - let ucode_data_offset =3D falcon_ucode_offset + desc.size(); - let size =3D usize::from_safe_cast(desc.imem_load_size() + desc.dm= em_load_size()); + let data =3D self + .base + .data + .get(self.falcon_ucode_offset..) + .ok_or(ERANGE)?; + let size =3D usize::from_safe_cast( + desc.imem_load_size() + .checked_add(desc.dmem_load_size()) + .ok_or(ERANGE)?, + ); =20 // 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)) .ok_or(ERANGE) .inspect_err(|_| { dev_err!( --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012065.outbound.protection.outlook.com [40.93.195.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA7DE377EC3; Tue, 14 Apr 2026 11:54:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167679; cv=fail; b=sep2zoFUKO18/e2Uol3meOIpsiUuqlD26Ouc4dizEGgmNaVYisyiPun3APSzi6RIVPBkpKL80MkhsuweGDL/YKVJpZi2459Jm1J0D/0nakEGm6bMNEVgqoeqlURa5AYbVN1WHHMVqxzLENlRdq+jNLcEzFZ/Ww1lN1H08Iodz6s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167679; c=relaxed/simple; bh=gfHuO4YYHmnmbUGXnHf7laEHFdhdNuPQJH07oP9yGjQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=mblA8kVtDqtMX8lYXw/ijQCh+ToG4GMxUY5XwgeIyC0wDonJ/kY1/x4fi+4cpdbG4lVeTRvCMLOP5JvBTfzxIs6dq+Tie+7sBsy8R5oJ0cQ2DFmLcmjpup3762e6Nod7uVdhCEX7/QhOfHM8BHB5ch7fUffep5G/T8QAeBq7Gwg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=XFzxnmvv; arc=fail smtp.client-ip=40.93.195.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="XFzxnmvv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sWZapIlK7HxRS4+xeYECO/3zqqh3jNngloAkclle4iKpHk1Jz6SSngUiYVcu3ebjKyiefc92t9AdHIW8pQfso4n9jgnwwrlCnMupsTstJG/R0WIZfT2KoZU2sO6JTwdxDOkSrK84sC0aQvNNKWmJ9jGZ8Nv9Xfz7evcoh+AROge0pfAqFWKnZ948ASpcmA0mGtBBPFD/TJiCSkJOYq1e40qKvgMEQmfDNNLcGlMcgSJ/7JPa25HketwVfsBQ9uoxHpeRO8JrY+wCBhJ+giKP1YxJx9N80wRJ2cbSi3BKySPYB6DPrhMbJpdmQqcTmEkDZ4hZYDY5LANEUT+Zk6sQZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dolz7HNMwtmbh33dqChZLSkd9tWJon2voQ8rSsLXKoI=; b=bVgIDHfZtOkjMfe6aXcTJ7kvf+pfgLlurEoV5/SJQ+uw9LxLL5zuRFB3lJJTuT6TOrQjxm/QHPeMWwc7weSrwrAg71RKK2bAuBJ7u4QQmCJUrjpzjpgmxil/TwcTvbGXFFgZ03vLZ1/mPBBJIoy3nrUsKwnUgT0Gh+DsWJJzp/+qllQyIp85PMXdmeshS7rBcN6lZmo3iuxXg/DeK+rmZWR3QLj9oD760dlCRrVVmnjCtoWfjOwf749dl0lVCYFwYLhcLebqSZfs0+W23R9AuySvNuSzIzty3X6mOdakJ8d6rm4TRiVHv9nF+xugGYbLfH/fsXpYgdEjLE0FneDA7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dolz7HNMwtmbh33dqChZLSkd9tWJon2voQ8rSsLXKoI=; b=XFzxnmvv0BkHv4CfLnQ368pfUaEPdjOrS0ZWWVScgfoMdC13PM275yr6Vzb7QRCuoZ1Bbt2jSNRBYaI4apaaEr2g1qdFVr9FD6rfYYuNK7ZCfnNBG114aPa+qtlX+/ByTEtX+uj7rybR1HXCiEmhCVerRphLakh0ICIOGmUXE1Mgr+/mhUIc/0icALpw1OtBYGNo5FaND1eDpHCaxLzs5rPQj8Baj10lc3M4j1uG47VKYICh9279d/IVJ6fKEfiR6IqqK6S7zkDu70a9fe2PG6MNCFiHF9/+5LMQXKg6T9XCuOlQ32WGTWpCuIBdHXnDAkiMw7V4SJ3qzSRkqW2SkA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:33 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:33 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:07 +0900 Subject: [PATCH v2 04/11] gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-4-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: TYCPR01CA0185.jpnprd01.prod.outlook.com (2603:1096:400:2b0::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e32c611-8264-40d5-0653-08de9a1c981d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: ecJKHlVU1naAiCa7noFRPBq0+9YsSgERv4oXZyOHGoJcZOXs23rgw1EipgkL+tn9Uw2TVgSWYj1+I7E7TBmti/EIf9kaFU+VFHw+SQwDYQYZr30KzCb9uusnnN7nXdkQw0g17snxWuIpbDLgt38ylZeHbVBp5ZQP019HDVKB1BEzSdLKrWBdg5x6yk8ePskqmtYo2+VdOR8XiTqx2dakLZNGUolBVYQrC4tlJtkg5ux1m0vwhInniz3IvYQKXkA03bm8gE+572ocjpnoXa9OZVcBn8snmEIP8GPnl6rN2HoVC+Cw3qmuo+y2RqoYMsDADp4MGXphLf3jb38lfCc6p+bA3Bgk8L9y3kspoOf7P0yBiQ4aHwI4TuqgHDLFaP5kAXTu5d0H0JYWdPleCk2LKr1ySAS2arqbWnQYfcxjBgcohs1w3AQsynoyzOdi2hghXbkSwvHgSFbezxFbY99bsPsSAcAX4J2fFqGJ5hr6n5PR1yNlmA3GLgIfr9SaqVbYGfmdkbbvap4BhJgSXn5lJwBK6cUnQHFwR9018+WZix/0UAjgqGOH5rJ6AZ53VGi04Xl4Lfr05ODesbGmXVUGshc3LlXmups2ZSZl0SZopInTD+tqXyzwAKkp2EaG/HLvcnYTIs0f9EhXcexU23mfOxBJobNBWeUY9NWE2kKValgdOrN81w3393oLZHTb3LV0j4ZqaMQUJXx0oqxPait5706Z4rh+hddu4BT/8N4HyNU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZGlERnZSdFJsREhzTmZ0SVh4RXV6SUMrWU5LVUhWRW5vSGU2bnRLQ0tic2Mz?= =?utf-8?B?eWdFc3UzV1ZqTWdmMFpmOThLY0svcGp0aDJGSDlzMUQ1STZQdUFIRFU4MmZp?= =?utf-8?B?d0dhZGxOKzBiaTVqSUxkS0NaK1JtcjEvTHNRVFA4TVAvSFZMQUNneWJORFk0?= =?utf-8?B?SVV0WWNIWmh5aEEvUGwyazdqeEdqVHdLeEJZU0ZRSWdoU0dFSU51UEpSTis3?= =?utf-8?B?cGJwRFV2YWtIZFhtS1NkRGp5dlR1a3lXWnRFcFA2M1lUdmVZOGJQbGQySWRs?= =?utf-8?B?QVE5ZFo3aTZ4NGNHbXErTjdDZ1BNQ0t2NW5ERGh4SXNTa0p6bUxSU0RzZkNx?= =?utf-8?B?cDBzLy9EYXFGYnhhY3l1Nkx3cG8vT1lyTGFZcEJUOTY2cVRCUXhjMWV1RG56?= =?utf-8?B?SGFCb2tPVklWZmhmbVhKZ1JYalFHOU43dUNxT0F3aTdUZHpmeW91WnU5Wm96?= =?utf-8?B?LzNlTUM5RGFFNXNIdmpKQ0dVK0ZUTWpGbGhLazlEdEd3cXVaOHNBSGNPenA2?= =?utf-8?B?QkxjQ2x5VXNuYkxDQkREK3MyMm1TQ05aWWluTnhzN0txNXJCc1RhYzlLOEJk?= =?utf-8?B?NUtGdWZJd2ZLdFRpSGhZb1IwemdJR2FoTDJDTFhBcDF5UW5US3dWSC9WY3B4?= =?utf-8?B?OUJpMGtweEJQMlBVN1FEbWVMVmhTRXYvbnYwakdLYTd5U3JKOHEyVm9qeHdw?= =?utf-8?B?TUhZZXR3bE5SeDlkZ0ZmTlpmZFkwZkt6ZFU3YVNENlNSRUJBUldXMW9BUkJE?= =?utf-8?B?bU1aQjhwam5uQ1B3WjNtMXBWWndwMkUrTEJqWWwvRjVlaGh5aTBlc2xTUmhj?= =?utf-8?B?Rm9LcXRxK2xSUzRZSG5pQlNydWRsb3ZIRVQrUTB6Q3ZsUWFPd1IzMG1vQmsr?= =?utf-8?B?bGZadkxteWhvbUdDc3pYb2Fadnd2RlpGWENIR3RJZERGbGRleUE2RzZ6Vzdi?= =?utf-8?B?d1Ywc3UyTVh2bE5UVHJ4bEdqQml0NXpHRHhPY084cjFYRnpJdk5zcWVZbjcw?= =?utf-8?B?dytSdFhxMXF3cDNGak9kbFRUREJKcjFvQ1BscldOa1VmTXk5cWJhWDdTRDc2?= =?utf-8?B?RnQ2Y2JFT1BXa0tETjdFY0dtMFozOU1NckFMd3IxL1Q0eks2L0wrZFRaem5t?= =?utf-8?B?YVlxQW1GM1RwTmwvUkFPL3JrSkc4dm5haVdNL3hQeFlKOWxEa2hkU3k3NEpy?= =?utf-8?B?a3JRS3hBNlh0cTZMY0Z5TldnMUgxeStzTGR4N3ovVHVnUnZiVGxFTnpJalJx?= =?utf-8?B?aVpJSWhaZzBoM3hlYmtPUGtRdVJLeTFWV0RPb3IzVXVSSUhtL043MmJhaUlo?= =?utf-8?B?Y2pJUVdkWUdZYlhjek9jUmY2Z0tMeTY4Q1lYclRUdytiSjBFaVByV3JldVNP?= =?utf-8?B?amFLUEZFZGRqVnNKTDJqaG55UUl4R0dJc1N6Nm9WOU1YWGUxcXcyaFFicW9C?= =?utf-8?B?S3RGVXVYMXlzbkJZTDlpckxJcGxBdDhBLzhvZDFLQVVkcVNSemVHbEd4SElJ?= =?utf-8?B?M2ZnMlRlcGVOTCtZL0xrYjlvQ1g3UFZZa0tOSzcxdGxaVmcyTFE3U3hKKzJG?= =?utf-8?B?K2NhbXQwWlhSeHVFTnB6SVdLMzJCSDhOd1hlYTNsNlp1Rk9yY1NiVk1CRlpG?= =?utf-8?B?N1lNNzZwdjNqMGNWNm9vZmhuRXVVUEUzaVdUVDE5Qy92QVp0aTRSVjJlMmEv?= =?utf-8?B?Z3pHNTVNTzBRd0RSNFFSVE5vaUkzRCtISlpWVWtHRlp6dHdPODhlMTdWVVly?= =?utf-8?B?ZmMvTEtiRVd2M25KYnhRS29FR0pjdnlqc1N1WE5DMi9Ta1FiQWJBNnYxdkRP?= =?utf-8?B?NGE5M0Z6ZGQ3d2NsOWh2bitIS2NvcVVnbS9LZm9haTVXQWVyb3plUHBVcmcy?= =?utf-8?B?M2J5NStXQnl4ZlFiaW5yazlBTkFvTHhFN3pDR01IaWpMSEIvNStqanYxVmZZ?= =?utf-8?B?ak1qSXFSZGxtSU9GcjZCLzRPMkxtM2cvN3FYRmloM1RJSFJ0b25iZ2o4RGNI?= =?utf-8?B?Rk5NdXRxaWNGaXVPMDdUT0JuMGtNRTJZdFMzdG9PdldhUjlFMlo1d0xqTjZi?= =?utf-8?B?aHY2UUhLRVNSTnRuWkZKZW1pV0YvdDdHcERSU3JpNVNJMkVjbFdpOVppd3lm?= =?utf-8?B?NVpBdUpJT3AxeVhNR2FiaktuOWI0aFNMZ2ExK0NZcWM4YUF5eWo0ZTlsZmUx?= =?utf-8?B?UE5UekRCa1o4ak1VMTZLWWJSaVBOcmZiaFQveEE0WVVzQnJZeGx2U1lSS2V4?= =?utf-8?B?QjcwR3pmVGtFSS9uY0pwU1hrR01GMWpsZnZEVHZnU2Q0eE0wQ2NaMHpLZEF4?= =?utf-8?B?L2VzeStXWGpRQWF6OElwUjZIQThZTTBJYmtJQnoxTnk2K2plNUUxbzB3V0Mv?= =?utf-8?Q?SPeQkqR9FZE/DE8SwvyY1ywbN/cQPI/wjIWu5RCzLg/MS?= X-MS-Exchange-AntiSpam-MessageData-1: bPgDuDuSS5+xBQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e32c611-8264-40d5-0653-08de9a1c981d X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:33.6831 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wQYNEqO4lGsJ5BlN86Fj912inHn1gteauYH6k0pQNuPOJT7Ltwuu5ln8CmMcWXqzkDy0zkbdZk8bsOh3fsv/5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 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 ex= traction") Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 632c8a90ea76..bc752d135cbf 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -996,17 +996,14 @@ fn build(self) -> Result { 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 =3D self.falcon_ucode_offset; + let data =3D self + .base + .data + .get(self.falcon_ucode_offset..) + .ok_or(EINVAL)?; =20 - // Read the first 4 bytes to get the version. - let hdr_bytes: [u8; 4] =3D self.base.data[falcon_ucode_offset..fal= con_ucode_offset + 4] - .try_into() - .map_err(|_| EINVAL)?; - let hdr =3D u32::from_le_bytes(hdr_bytes); - let ver =3D (hdr & 0xff00) >> 8; - - let data =3D self.base.data.get(falcon_ucode_offset..).ok_or(EINVA= L)?; + // Read the version byte from the header. + let ver =3D data.get(1).copied().ok_or(EINVAL)?; match ver { 2 =3D> { let v2 =3D FalconUCodeDescV2::from_bytes_copy_prefix(data) --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012065.outbound.protection.outlook.com [40.93.195.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 420863D75B6; Tue, 14 Apr 2026 11:54:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167680; cv=fail; b=r22v0gkGQlj9rSk6aouxhWJ/oe4D/ZIzgO5xM7ttso7BgJL5MbhAdhn3hmBP3uEl/8OwDEGM//oBW2HfP0GKxuY58TMsBoNmxxW5Vhb9swK5mFm1MLJtzGRM+t4MYWrOmIFwkbBk0AzbpbLrkO080VW3hTmkcfrwzcquZC0DVpk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167680; c=relaxed/simple; bh=BFZcsIw8K/orH0OmNSEkxqMc+7Bechu9+9PC57+PUGo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=RIUNUB1msyoXquWXCBaDhfbWUGN/LO15mHJsYCXllKhMePFDy38wtGZMeESW/Tv5PqSSlIKFZKmXl6YIdl77PztQ4H0NwURzufhKhTAM0Owx9oSMD7A9WNObwz0VrhzfV2JhG1UuyIcIppHjbM1SHtRH8OxA1YC65YnmFCP72KQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=T1+cZhwj; arc=fail smtp.client-ip=40.93.195.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="T1+cZhwj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J2qi4nBGbA+1RDUmOIEhQWm198C8tNvq2g9H86Ju4J7wsn9glkG/2eB13H9YNWHqY89DQnQXDQ3BIY5ubVj+zI+E5DoJ/ncUsVioxsdVDQ4YKL7AZYYkvvFXhhK0lDdr2JzRpAWzZNXPLHIO0PlRSkKj8RJMCuQlZ4SA+icYvTydr/9UEch+PXY5NL8ol/0BIJphgr4Xy7puy2lGdoHA/X2fQ1H5PlpF5KIwmOEGgo5lYgleHzi+lNzNa9DETw8gRg6o7PgKQb56j/7g+pwX1eGYZhpP4e5RrLVGZeNYvTlzJ/+NxJLW6nOTZJ0tBoVVC9xstdTpEU0IKP8w3Yn8sA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=am9IEKN5FZ+EC6BBZRkNvmzqqsdolZmLaza7Bqphhfg=; b=kUvuP6xdV9BFyt/nlAwdLp5EKcFPrKZ0raSaAYs13OpwZVGscq5ZACeaDs7TOJ5F2rEW6doTpR00P0YedNkUQE4+abmCU3s0K1dJ97n6cFHRMd9o6FDytnbnfS8+/AHOC0ZIn4XGWnsphPnMD99u2bDxpvqaJJCeN4nUovnzEu2A+Q0txHFrxT7gOgRIvgaDyF025NAZyMHeUpb1ZdVcBzNQb7ShCrC+cKZSFlXhVDP/gRbzR+NrRnQYyieJUy+htxCsCi/kWAkbr4TAxadcZ0ULNUOKtsFilDa8fkQQa0zEa5RE/6jN9g9aXY30hzBUs2IDzQihO4QTX4IRv5iqpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=am9IEKN5FZ+EC6BBZRkNvmzqqsdolZmLaza7Bqphhfg=; b=T1+cZhwjSK1HvIlR26manlNlZFP/S7+129fZQb4e9omMPwkOb8CnxggSp9kYXAzWNLaix95zfjfLYpT1ux4FGHq7fKO8xHAt/kKyog6vV+tvrfuBFIBW9h+GMiUyCcGQ40oQwwYcUUr0dPyAExOrXn1vXRBs+Sa32qZvULryFMW8sTUqdrdlsdPpHSKpGnXNKsRPXfdNArYANe9eEwUF+6pSOJl5NPvn3gqOkc/fPL/4DFERJHJkuRvSVT/KUIIWg08Mf5yXoSJfIFZ5yWLmzrMxCo2otnQ4ggbxwf19ud2pHRqXjd1z4JwOUAuMnHYn3bYKGOTvMIKkXFbtaEZz+g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:36 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:36 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:08 +0900 Subject: [PATCH v2 05/11] gpu: nova-core: vbios: use checked accesses in `setup_falcon_data` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-5-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DM6PR14CA0037.namprd14.prod.outlook.com (2603:10b6:5:18f::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 43794c76-557d-4867-d049-08de9a1c99f9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: aBmt1mJaVk7qPrNaXjBKKByl2IzK9NYQrYr6M5HpXMiMArf3SmiftF4clyo9iYHKHcsPvaBnTwSENJ3agBCZJ0nR+GA3Hxffgw0tjj2fMQyR1DIYB0fugEuZn2bb9+C0RNioMALLhbJIvFV+2gX4cn9kj6O2+DiAML42pinjS6ofUPrDjJyGDdmFqkP7c4QiOuPsJdkMGRi+IielsyxIp71fMuh+chW2UmVzbOuisip/HE6+AXYaOEgLmsEoNqd5uWcRJvQw+75LKPZMaKp423rS82tWTHdgn129RO1DAAmIje7DVpdvvu42Y/spshZvbGJedSY0h7nB9Dwgtc4C9/vcXGfB8eCu9OHeft2Yse4cy2GlAaXS4fqYlBb46UOY40uPKbkjGfSV/RZSLF03wj9ftndBCu86S6NmBaXj6ICqafs4ZK4h/lvYdmShV44U2v2WKALiEHruvPdKWq89Bj3zd5V5/D2F3sGu0IZI7HCdk6d+uvouQmkdHbpP5EzHYvIh6e2v1lEoh1y1aQoR7DLGGxE8r5ZK1j1Es1y3CZD0WJiIVrszUHfPZUhh6MbO3bpBqMuHIgoC2YOnhN8UgCQuarfCFwWS2yI/0+fE2D17/rY1BiTBU7BenoPY82dEbLyAno4rd1PXFTDtOcBt1kZbVljDlU8bJm/n+NRJwNjt7ZDoYDl0rOjhui8oyDq/fzXCyJvaI6oX3qudzbJ4B52bwMIMRuM4EPGIHZCJLaE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eTVRUVlMU3IrSytTVzkxdkpLN2hWTHFYL3dFdWxKTjhzN1Z5NEM2R1hRR2ln?= =?utf-8?B?M3hpVWEyK2RUbG1pcUwwQTBNUEV6N1BTa3cxdlcwUXo0d2Z6Q3NLL3N2dGtV?= =?utf-8?B?YkVaMitLMUpucVJ5TUhXYzdkSGZFVkhaN0laVVdHa3hLMVpYdW15U01kZHl2?= =?utf-8?B?bnMvOHFxSGNweWJpMFdLQjNnckFMVGRVamFVY0tjOXlmTUVxZ2x5bkF2andH?= =?utf-8?B?L3pteHBsRlhTQWhwWnhwaFUvNEMvUTY0c2wxZTNLUXdEaDFvc2U3N3NWaXJz?= =?utf-8?B?bWZjNEl2cVQ0V09PYUpmeDZQd1dwaHFhNDlWRFpoWTQxd3Bkc1VxRE9LL1VL?= =?utf-8?B?b2RBTlhIb0o1UG84TmZuTC92Nlh2QVc2a1A2bDF2UVJ4eGh6dTI0eVFNWDFY?= =?utf-8?B?YTdDTTZ0Rm9yREpXV2RyS1NZcnVkRkxiYWpVcXliaytGYk83alhucTNrVFp0?= =?utf-8?B?Z3Z2VDVVWDZ3cWJDUGNOdjlrTGpuNndERC9OOHBEWU9Jdi9nb2d5STBEbTBG?= =?utf-8?B?cWxpNWUvMzViTTY2NWo5bCtDNGluNm15Mmk3VTZ3L2h1UXdGN3UzNzRDdXBq?= =?utf-8?B?cmswQjIzYlA5Mk9UZC8yR3ltdHE4aTN4N2hpT2NZdFlESGFTMjBnZnUvajNS?= =?utf-8?B?MzlJamM0SDRoS2RVeHV6NUo3V3ZNUlQ3aDV5VVVsV081Q2o1dmdxUGszOUJa?= =?utf-8?B?aFI2VVYyRkd3TEpYODFicXB0M3phVFh3L0djQklnQXdmMW5Sa1UyMmY3ejhx?= =?utf-8?B?bTBvSE9KRW5PTnVuQnZ3a3J2Szg5ZkZqSnNTbnFIN1RhcCt4cHBXdElVT29J?= =?utf-8?B?VmVBRmJadDhjaHM5U0JpanZ1OEROZWNzK0NzaEk2dGtmUG02Znc1bXFtUW5S?= =?utf-8?B?ZExSUDJrcENIL0N4TytNdmlXNXQ3RDRXM1ZwUkx0RktPVHpmNmU0bFFLaFpr?= =?utf-8?B?WkpNcFJROVkvb2NJdEFhSHJqcXpBM1VtbjBGTDhvcUg0WmQyQ1BOM3JaUGpU?= =?utf-8?B?S21welVYRVJSZlRPOVdCVFN6TVNoRkorWG1RSmsxL004Nk5hT1JmWHBxU2V1?= =?utf-8?B?aVJoT2pDVzFwMFVBejN4c0IweHlJdnZXa2Q0bkZxSDVRMTlCVXZqUXd1VWJV?= =?utf-8?B?bFFTZHNlaVA2OG5OSmhZRGk5eWkvUVIrSnphUExBRldmS2kxQ1lobzVGT3Fl?= =?utf-8?B?dkYzU0RwWXNLVmZRZkQzWGdWWm5ZYU5HSGc1ellqeFlXMjV4WGlrVWpLOUJF?= =?utf-8?B?dC9nV2ZGRkFnUE93QlRQaDczTW1QQ0tLcElTcnRtTzRKTmlwZCtDUEZvNklM?= =?utf-8?B?WUlLaUt0NXZHajNLNEx0V080R2x3bVpTTWRjYnVsYytWc1JlVTVxTjZicGpw?= =?utf-8?B?WmJjQlQreHZJVDJDN2Yvck5WM20zWUszNzg2Q0ladjQ3NGxFZzFicVVHOEVs?= =?utf-8?B?UEFjRk5YTitBcWhjaXBSdVgrcU1LNUFuRVZETTIzWUFMSURhQ0tYU1Y3U3lu?= =?utf-8?B?RG5kVktYd2twUnl6U0dwMG9WRlZkTVFoYWpxTGFHY2xPVVMvbzYvMFJpV0hY?= =?utf-8?B?TGIvZnRBdEpNWFozZll0c2JwYTFWQjJMSHdpT0RnUDFEVlVXMXZMNWFPY3Zr?= =?utf-8?B?Vi9xdG80SHJwdHlKZHhaOWRvWHN3TFl6czRPQkROU1M4bkwxWnVOczhCTkI1?= =?utf-8?B?N2FzNUFZYmVDL3N1WXAzTjVJaGU5SlVjZEFkcSsxWkMxeGNvZndNWU9RdDVX?= =?utf-8?B?b0NidkErUWMvc2dxK0t3ZTMwSFFKS3JkQ0tvS3NCdkIycXJBU1BlOVl6ZG1W?= =?utf-8?B?YWRRR0hDc2RaemFCbVhHOWdPVVRHOXFyeisySVJLZlorS0sxdjYyUDd4b3Jj?= =?utf-8?B?eXorV3hvT255S2Q2aVduaEd3aDBaVUFoYmVnd2JNUUlScVpVNnZnSklwVFhZ?= =?utf-8?B?TGp6Q2xyOFZUV1oycVNpREE5anJPcXJKS2tVZ3NkalB6VUxrNWJsUVRVUUdp?= =?utf-8?B?MVpLNk5FdzlqVFIyZ24vUmZCSit2clp3cU96L0JPTEdoWFc3ZTN4U1FTTk9J?= =?utf-8?B?STRUYlNMbG1aWFVEbHJTa3lDeVpHL0tZdnEybFB5eXhkcUsrMTZjRDExNmla?= =?utf-8?B?N1dQSmpaam51QWpwVHdGRmxRVW1BbTMrVmZvazZtU01Xb3RxdW9IRXZBcGNs?= =?utf-8?B?ZUtpbjFWWUZZYzh6YmQwWmg4VmpjMVQ4VkF6TG1rVTBVYi9LbzE1TE5tSG53?= =?utf-8?B?K0luZlBRR0tlLysvblZwdWRtaUJzNk5TS0E4UjJ1eGRvTDhhWGEvUjQ0U2pm?= =?utf-8?B?TWZTZkpXNXp3WXRqUTZXYzdKV0xDYndhNC9Oekt3d3VzblR3MmUwWEx5THFK?= =?utf-8?Q?Ff7Ca/4BY5F70rdQVgzxKcbG6GuSWHiEuT9fA0cdCfgfM?= X-MS-Exchange-AntiSpam-MessageData-1: DjAjZw3EvolCSA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43794c76-557d-4867-d049-08de9a1c99f9 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:36.7532 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Ko/Oncq3fLwAj0VrEd1+hoYFG0hJ6msG61xWSCILDm1dZTx4CiHh+EMQk5KnNcq2E5fCj4itakTvg2YQmY/xLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 Use checked arithmetic for `ucode_offset` in `setup_falcon_data`. This prevents a malformed firmware from causing a panic. Fixes: dc70c6ae2441 ("gpu: nova-core: vbios: Add support to look up PMU tab= le in FWSEC") Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index bc752d135cbf..d8633e61178b 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -955,14 +955,15 @@ fn setup_falcon_data( .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) { Ok(entry) =3D> { - let mut ucode_offset =3D usize::from_safe_cast(entry.data); - ucode_offset -=3D pci_at_image.base.data.len(); - if ucode_offset < first_fwsec.base.data.len() { - dev_err!(self.base.dev, "Falcon Ucode offset not in se= cond Fwsec.\n"); - return Err(EINVAL); - } - ucode_offset -=3D first_fwsec.base.data.len(); - self.falcon_ucode_offset =3D Some(ucode_offset); + self.falcon_ucode_offset =3D 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 n= ot in second Fwsec.\n"); + })?, + ); } Err(e) =3D> { dev_err!( --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012009.outbound.protection.outlook.com [52.101.53.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84EAC3E51EF; Tue, 14 Apr 2026 11:54:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167686; cv=fail; b=HRLEAo6pwrmj3pI1ml0EuZDMyIC5YyyIXlE4A/RnK/4z/eqoffRYprBrLMnC7D5CVXcKKAk3puYRL0RMruDvUWsARjsv8W2qoWaEq3mEjWSpyJP0D4IdLIoTsa0mKfA8ll0g65IV7oXZCjSKGnitrQHUSd2LQzZz+1ExPDbbUm4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167686; c=relaxed/simple; bh=6Gk24NYBuvaEsBQ2EWx3n+iJIX5oqvR7glGQqZcf/Oo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=AGOOc9mEqm3lzhmb67zxY6VcEiyrQlr+nQMF6sLOeiMitsrocZwUbzZYGy1WL8NfpSQ/YFXIzpzlW2k2VmGg6rNG9e2CoOQqhwYHogcRxCVbd52zga57vCSdGh3KWTVy4uUcDMhRagCWrLXpa8OPnwjucg+sPADjkPv+HZNAkvo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=StMF+TpA; arc=fail smtp.client-ip=52.101.53.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="StMF+TpA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FSke/enENMk+FOeCvwk9N17B6SzTzDny+e0mVcaR6PDwT7FiL1ghflZbhYNontp5WIex26bE34w8BYc6GA5s3xSMRXrd7uLThVs3EKmUWTiOY8RQyoEBJrVcyV/0gALFIl1/W28lzZmkioV1QRLMflMolAsmCXNzRFgpr+VD/0ZkyqBbgwEWGQzE42q+5oi8S5tY7TZpvHrVoFBWdzDWr0NAl9xdyWIGPQDzG+xMqGRFFnuVcuNT8ZzsofbPKGtJP9UzM6pmuCvSyiPSuWWO6rEem1Fd6UdPHXGGIGu70DOM/J2ksOGqzzdsn1YDE2MVT8NvzmQFrM+yM7/ysVFF0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=PX4c5umw1jWiZsEhDMeZJwB9rX/FCvVJ8lGnq/iRV88=; b=UgXA7QtI0o9FOMgf2dgW/BwcCwLjdfnPrMwASs6yhhSqjo8yVHVTjEY21OHPjUcatZij1ylUJQWjUnE/IxMGZNl4JwWPEeNCepngt/pmIJq9SQP1IWS8ZZNWBpkIhiz1MlUAQL9Ej3wdjVS8LUJW0IHsW8rwwP3LajIWIhNX/l/dxSshLV+fpKEctKHwyWTxaj86ksZJrY7/L4Ip3FFuSuzlpNzuJ2nx0oruJmqR/8gCSTaRzctb9fgiTbe2psu/4Eor327VtELUs0LBIoWloCi0yCLoM5gkLwfCYKM1rvW3eF8yq2DPTU32WMP/v5W8bxwLafWi3tCgj2UbH+ZAOQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PX4c5umw1jWiZsEhDMeZJwB9rX/FCvVJ8lGnq/iRV88=; b=StMF+TpAwdUVArxKoYDktrUCe0gN3O8pC7olUwHSI0uK6VU3sVDKcJqyqM9Rms9BQ27O6HvNKzsY4w6ZGriltwVntxkZThvm2KL0+WFE6AGUyipyia5R0UEslqMO1IZfhnoUUU2H7+IQuLeeLsMt6D5Z3Uq9s7QuutBSyI7LD9CbO6jn11Mi32OSJ5xfJvDd0OSIMoInBhpLRNP2bL1M8Nog4oGwj/TNekM2SeC1YSf8lvt5jEzTS2lgyCPHbttZtdqgvXY14A8ccdyvu+zKh3DkYO/GLfIDtCoBeut8LniF6oa5eTvGZ/Pj39ioEEJgA1OzALSC1zhNcvoG2JwjUg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:40 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:39 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:09 +0900 Subject: [PATCH v2 06/11] gpu: nova-core: vbios: drop unused falcon_data_offset from FwSecBiosBuilder Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-6-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DM6PR04CA0027.namprd04.prod.outlook.com (2603:10b6:5:334::32) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e10e90b-aa19-4ba5-14e4-08de9a1c9bdd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: 8w3B15xtcTQ5CwX0Soaoe5Dy44r+9evJPl0isnmoCpjtu+WlM7AM9nYqxmV/1JspWh2IZapmS/FzruXro2BChqrAdRbSFbw5kwjV2CNJm0KeiymM3X1afb617If78nPK2sXK8X6w0vh63wcCxkurx5fxAJvErJOHbwIBfYq03DIF1yBv1pdMsuYyEsdId5iG/3DASGTtjlg05xWG2e0T9kjNoz+xov6q4m6G/Ie3Ew1EwjVM2zvpLAvzBSueopnJrRQKlv4w/Fi+AJLPPIAcEodkL06VOHs6US2qD5QF0fzXddyNLBmlnWKIvkOuwt4pjXBSKX+B7B+VCKbo6uev66kqk9oHzuSCpPEosOBNia67GLBsO1QpfZHI1K8TADjSeFr/QSMHOFhg+izp4An/866jqBjkqkxDYymgDUr9hfODtA6B5Q0YMrN2H2DIaD/+s9JhplsEGcfWjaSRGIfRjdHA3b8gEDqiS0r+A8HbRwvovHHido9Knja78X7BIyXBaSsiAXose2Bw0Kkz2W5+fLqQXwFU2B0DEKIa7QheTju3E6junDFSBRQzCSPNG214lEPrTSoKlP61MP0AbBDb3++z72j3BqV8AZzUFMJJDeLW5WC3p0lNJWjMr6WVmmiN5FrPZZRF7zRJjZ9Ep+cOWzl7a3rZ98KzeVYnd3woi/As0fQMaz+BtjhVrUu3/T23Yx7FYXYDVgKtYZwFXsndCXJhOhKwvqj9gw1lEsJRZfM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dC82WDdrUTFOZWpyeGdVcnNrR3Z5MGFybXpSaXpjelRycGlpcGE5UjFKNzlw?= =?utf-8?B?NW0vR0N1TVJlUXlvUURTTk1qYlZlOEhPREtUTVB5aTN6RmRkcXhUNEFscThC?= =?utf-8?B?c2hvb3pIRk1GbVJoWWV4bFNQaXFMNW9jMlI5ckdpWlR0ZFY2Z2FIK2ZLaUZy?= =?utf-8?B?eFVPMnM1UjBIWkJYN2MxYjROQ1Zac3lSUHlCWVNuSGcrT2Q5aC91WFErUGNJ?= =?utf-8?B?MWtuV1FTTzFMczBOQStHbFk5cmovd2tiT053UzIwRDA3NklDdEpRUVpxaHBw?= =?utf-8?B?OVdMaXR0VkdoNXRURlc2OTM1OUo1a2t5b1g3YlRWaU5kSndmNVZ4S0JaQUtZ?= =?utf-8?B?Vk9teGI1YndPZjJ4cm9lcS8wUDRtTGZlRGRHUUwza1drL21mQkwxKzFjc1A2?= =?utf-8?B?c3dJeFNFdERGTWFVUU96a2krN2h2VDZXemtrSW5GbVUyMktFazNPYkVUU0Mv?= =?utf-8?B?Q0p2YzZuQTNUWXFSQ2Y1TlRTTmxYZU4rQTd4VnZqMElBNStDSDJMTVVVc1Uw?= =?utf-8?B?eDVEZFZNOXlsWVM2Y0hGZmxxSU9VaDFWZ0RKZUR2T3lCeks4dHhERDN1T3dF?= =?utf-8?B?eVlDemJRSVVMemdCT0pQWDlzS2h3VjEvSmNBVlJtbG80eWI0WklVa0k3cXp6?= =?utf-8?B?Z2QwV2NMZlFUMll2V29qaDhyRHVrMGxHVlBTNWx5bFVjUmtkU0p5UnF3a1NM?= =?utf-8?B?OEN3THJjWmdiZ2JvNGI5K0pSZTAvTmRmZ0FPcTFybW9yZWFqNnpGMkdsNnlY?= =?utf-8?B?dlRIV1gvS1UxN0JUQXVHSGtGb0xuZ1ZUaGNhZ3J6MXduYmhVd0hWcG9FYWRR?= =?utf-8?B?bWUzeTkvRE92aVlIZDNZYzEvdXMvd3NGNzdyekVqaTBKVTZaQmVKcDFoL29p?= =?utf-8?B?VjBITUdIOEdxMkNiVEtiQ2dvQ25nZDVwcTRKRnkxZUNmWkI4Rm5FQjUzREZv?= =?utf-8?B?eFluZ1RQTjNNdFlhYmJLN1FyMjJQdWJndldZbDBGWnY1UUN4OWZOaUZ0UkYx?= =?utf-8?B?Unc4My91Qm9hVnFMakZIY1ozU3lEOVZlb0E2VXVwamdNOGFjcEwvTkVHUlJ0?= =?utf-8?B?VlRHU3B4ZU1yMEQ4czExNkw0bFVsNXFyWS9ZNDVxSDFFOEs2RWlpUUZRb0Uy?= =?utf-8?B?SUI4S0RPTjUvTkwxZ20rZm5JazEwRTNLRnloMUc0VTVZVnhLcU5QVTJXQmtF?= =?utf-8?B?bEs2dlBFdGxndzhuSWtjZ3UyTStrOFZ0dnZUOG9pQ2lhS1VmNFM1SGc2bWZ6?= =?utf-8?B?S2tiWVE1OXI2Qi9qb1crZmpoanpma0xqdXlmOWw1WHVWSEVENm1MWjdva2VC?= =?utf-8?B?ZlVJa1RrUUdSNWVjVElPd1dDY3YvbnptcmZWZkprRFAydmNBQlFSc0lSWTVC?= =?utf-8?B?WXlhMlJVUTdGTDFCKzBiUDBrVFozR1lBTDgyTm9TWm5WQlBZUHFSZGovY3NY?= =?utf-8?B?ZE9RMTFwMkVyUDZSbjFLcDU4UlEzWkdGeE1MbVN6Nm13ZUNITTJCWElMckh3?= =?utf-8?B?U2NGUHVuZ2p1NjNPSzVOQ2ZleEVIcjVMOGxHQXNqcEQvTndsRjQ1RnM2My9R?= =?utf-8?B?MkZkeVd4aGw5SlU0NG5tR2FjTUNVa1Y4WHY5L0QrQVp6UjI0VzZFWmw3dENp?= =?utf-8?B?OFRvMFVoUEI4aVUvczQ1M0hHeVBRaTIrcFczU0FmVGVIOXlrR1RlcGdkZmFU?= =?utf-8?B?UmNyZEtRcFArS1BHbEowRFFtRHkxVnNlNE4rM0ZFYXNNR0ppUFg0WVlqR3p3?= =?utf-8?B?bVU3WjN3SURibUNnTlJMci8rSnNjdFBCMlhXdkdwY0ZMbUg5dWhBZW9va0ZR?= =?utf-8?B?RG9rZmRTV2FHbzBmZE1lT2lsZituN2VtRFRiTE5NNUNGOXlvTmFiVEp6NVVK?= =?utf-8?B?NC80MENqMjBtUnZOVW1DZjl0SjNsVkpWSGFKWUU4UjBrVHFIVytTY1pUYzJ2?= =?utf-8?B?S01wdHJJM3B1ZWlwNFpSR0JZdmxCMXh1MkJNU2NVMDFKbzZKZlNLMVJJWVAv?= =?utf-8?B?RUU1ZEUrRXpJS0syamx4YWV0T3VTVnd1eFhUdUZUZG5PNFFCYndjaGVPSzNy?= =?utf-8?B?TUJpT1ZQbzYvRmRSN3pmSWk5VHV0T2paL05BWW9adTE2aDMrYy9yRVJmME5v?= =?utf-8?B?Y1VWMmczSFRnVFVUakxPcUUvbDlRZWwveXdEZWZkWEVoYWRwTzhKSFFOeTZC?= =?utf-8?B?bjU2b052VkorZ0RSV3NCMDFXYlowNW1va1k0ZjM3dHRpNXZlUjg5bVEvSStT?= =?utf-8?B?ejM0TDM1VDdwcTlZMlFJK29tVmgwMWFydCtabVBQOTVNTHBHODlFN1JFNzh4?= =?utf-8?B?VXhLV0hrY2lEb1JzL3dpV0RSVm93cm5DbzBDQVUvNE9uTW04YVFxY1JzOGh5?= =?utf-8?Q?HNDgQdbOmojaunrGYc5q8wYKucX2R5y2oCMj5gVcgMzwl?= X-MS-Exchange-AntiSpam-MessageData-1: SL8m5S4d8F10VA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e10e90b-aa19-4ba5-14e4-08de9a1c9bdd X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:39.9005 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Hzy7MRX+XsrLDJrGo/CjG2we1EY1lBQDWujSTO0rDkz7u2iFQTb4kSFNI1PtR5hOKG/3GB3Y4mIypswgCX1tBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 This is unused, so we can remove it. Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index d8633e61178b..d63af95eb642 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -256,7 +256,6 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) ->= Result { Ok(BiosImageType::FwSec) =3D> { let fwsec =3D FwSecBiosBuilder { base: image, - falcon_data_offset: None, pmu_lookup_table: None, falcon_ucode_offset: None, }; @@ -631,8 +630,6 @@ struct FwSecBiosBuilder { /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new /// [`FwSecBiosImage`]. /// - /// The offset of the Falcon data from the start of Fwsec image. - falcon_data_offset: Option, /// The [`PmuLookupTable`] starts at the offset of the falcon data poi= nter. pmu_lookup_table: Option, /// The offset of the Falcon ucode. @@ -934,8 +931,6 @@ fn setup_falcon_data( offset -=3D first_fwsec.base.data.len(); } =20 - self.falcon_data_offset =3D Some(offset); - if pmu_in_first_fwsec { self.pmu_lookup_table =3D Some(PmuLookupTable::new( &self.base.dev, --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012009.outbound.protection.outlook.com [52.101.53.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 062E4396D28; Tue, 14 Apr 2026 11:54:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167688; cv=fail; b=R/sgw6bDbWklbCwzYksIR1sdtwJXLjBF27KH0MVOokScv3ZIXy+G1u331p7vfzNTW4+o7ous9ra2wN3r9yorYQo0+eSanitwjGHxUKdiltukotewx2KZV8yjdjcJYu4MaRattZ416JfU+tnqBLAzLR4nh1vBHBBS9wehcYSHiRs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167688; c=relaxed/simple; bh=hL8R3ByoION3xY7Mb5vmYpu6a68wovw76X6b8meCbpE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=fZUwsu0cl7qZTG2TEeLUFh4dgwOZJqcR5lplL2pwJDLUdJ+LHhqrv/i7RWtWrWkAA3A9eGNdTqV2KNT6a61IsBm1RqIzRWeWP8ILu18TW+WlzwITPTENWrZ3LabYnkxmOrEw2XdU9l1VFSZTD06Ntr45NAVhB8EgxkXz+XRXh58= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=X7dQng+C; arc=fail smtp.client-ip=52.101.53.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="X7dQng+C" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RSnnVLuQgMHTyCAKKUaJqwjEVR3XhpEncgdryDTEeDlsKTaStt7DmgEGlhCzxbvTrJJtyKicLOFS7r+ri5iyg2rPu9Hi6Nls48/jXKG5otDSxtD5EEttKA951tdJQWoEKRACSkuTF5cZEkDCt18fAn0YnttuAAJwjrmXNC+rIZJLCr8legg5O2qUBjxWaRtFxZKNlQ2CnGUlvlbJ7KnM9TQo36IR0w7+869i7Q12xx/+YwzvhiRbR9nAi79cAoIpDZeb+zfx6kxWFHq5KvlFGRruAH0+1Bn9f1xMa+JhqKoaRMpmAcd2PEi6fAxcMcrJT06FVdbZlUGuCY43qhMhbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JQozavHaE6+j9EIxyMMT208iJxGk366tiMnKj2Zm+p8=; b=eOxlPkAR958y2sC+JCzpFFBNowPFBZTHis3A4Yr/Syg507lZk9FAP7y0bYxTcGYiX+Kdp+uz+rvWF9+HQ4AnhQVCieh+mMfq2uHZpG/qOT4KpNhWnfqvWHNr0fuLlz/k8qjJ8oystUwbj2i/5HdAjJcx4+IGAFyn21+3oo5MNheiitizuBAELgg+zJ0VvXpht4mS6p368oQdYkjbO7BRHQ4c6cwJgQAMuqwtTyykDJM3gx+0b1UeGBvUiJJU4M98MD1Fx7wMzjXLutrleySzbI623Gw19Q6UX0UBhLfgslcwlV/xM6IVrny+R3LYW6BpCYMR+aF6KoyLX6THzRHv1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JQozavHaE6+j9EIxyMMT208iJxGk366tiMnKj2Zm+p8=; b=X7dQng+C3qqLeU79ktZNjReWgUW/4B1j6DrVW0JkYEBUonr0t1XIPRz1QF8NVKejV0P95I2OT9+gbS/DXS0tUf1JX/TeMl5y3j6R3TM+s5q1kZm4zYFfXFASsu6ejsINFs1FLRbD3J8DDWZ+aaMFTEXKBW7rj6zRCXmjg8fvR725KYkYkORsTdBFpAMzDxxjAHsBUDDAyOKnpme+9Rg70eUZ9b28370kpk/BYDHgqomMotC6iedG0jC+fsFaEDeFG/sDskljGDmzNOkEdS2v7bq5OpjpuSodENH/lihyyTyLqD9uSzaPd4PVXRwSWPXxEQfunSNr2331bgJ3ycHLkA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:44 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:44 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:10 +0900 Subject: [PATCH v2 07/11] gpu: nova-core: vbios: keep PmuLookupTable local in setup_falcon_data Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-7-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DM6PR21CA0029.namprd21.prod.outlook.com (2603:10b6:5:174::39) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 743b31f4-c505-4504-f774-08de9a1c9e5f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: mbwWVt6nFvQ5yWX50yewuZINNIKKi5x8q06eZXMZOGTGGLAUOzUUcFZuSK7WABvKEsHc0CLjmK+kGQb40UYytHWHmT/+0xuQMjgUqO2BT/rIIYZ3mZbm8P5EFQCy7mM+btJElN1qfqUCRrsQFXQxitLW2iKDsReqQ9sycs3jTbUt9HdzT4NkUmxGSog1HjabBrRyy8dri2z5nMpaYv2Z94It5gKTdE5XnZ+J4cFY8kOhTadAAu7eagSg9Ei+jW4P64zqNN3wxTwHVs4iurqrblmbVAwS1pGBMCYpaPCiuDRAWsgLFJYjmrePYxG/onVlPBDXfaq9FWAGaR5pGnYtRDnNsUYwNlEPhKPhCAJeI3SlVr/cX39CN0iJgnlRDU7c1+wHIZJVIHjLC+e8+1wL9fVRKadRq67g6ZVCvebRvWs0M3KrsMmgl+7/G0WQcpZ0I4LZz2ztDBXKM86C8eiKz1XurwfidaoZFK0kA+rO91ig25hE9TRwFpiy+oELQcHbAF1TGaGIFyHS+JPoi5yheJpr4Km2R3M7sqls4pG1Yklx3tzLEgeoxjoKhSk+SXk1JRIeAyCzL/g9ihxnU9qlbhOeRJ45lCRdfTnaZQrOlSC9Wv9tSiT8W+cSCj09JAbpR6FIliRofPTJCB7HZZcDZGPogiTbvLRwygAhCeUwXuHo0ogZPnVfMwtvP7RrYl+CU6Cva/H7cCv2ohpko+Mo4sPOV761iDggC/lmpnA+3YE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T25tUlpwR293TWJIWS9haGhmQ1d6eUkySDA1dkpweVZ6c0s0UTIrVzEwT0hk?= =?utf-8?B?allZczRJNFlPbm9NTUtnbXJ6WWk1OTJBN2pRZ0tFMWdFRU1rdGExa3JKeWpG?= =?utf-8?B?alZPYlJCZDM5ODU5V1JaYW9EQTArY1pCTFpISzVFeU9WdFI2L25lOGpSYTk5?= =?utf-8?B?MlJqaHREYTZlRmEweGl6d1d0MDVoSFoySkZOWHFVZWlRVWxZTnFOOVNvczFv?= =?utf-8?B?eUVBWUk4TDFVMyttR1NOejExY0FKdDFwZWFLZ2tLcXVYYVNkVWM2cjBEa2tE?= =?utf-8?B?RGVqQkl4eVRXQjR0anNpOVVrVDlkVktZdVpKQVhSTHZCVUN3d0tudnJjMUJC?= =?utf-8?B?aWxjeDFDNXJDNTluaDZ6Z2lPUU5lQ0FJdjhENzFlUS9DTjZPOUJncjExeDRw?= =?utf-8?B?elR5RUNxamo1NUNUL0pvMzB3ek0xaXpiMVF2V1l1eXdhQ0R4NFptZlF3VFhU?= =?utf-8?B?U2VLaFNOMkE0NFQrSUFRSExaZEc2THFmTHY5dURkWUNoa3ZWOStNUnp4Vkl4?= =?utf-8?B?THF6amFwVXR1WndaQm9KVVdmMjdHb1VLeEE1NFZRMnpCN3NtYWNmRUx2RXM5?= =?utf-8?B?UHZWeEx6SzBoeTYrZ0NvTTBHakxaVkJlQWVtMTI5RVR5Mlpha002YVcydmVj?= =?utf-8?B?UVNUdVNwY0pXbTEvdWdTa2ZQSGI0c1lYSlNHeDdrNjlSYXlZWjVpd3VxcVBI?= =?utf-8?B?TUx5clN4djNiQjRWMTZiOU9MaGptNjQ1MnFqNVhJZUtENWtPdFZBM3RXK0tX?= =?utf-8?B?V3ozQUYzeVVVbW04MW9vSENQblBhZTI5dGt0NXVLQlhCQlZVS3ZjaDNNYUhx?= =?utf-8?B?aFk5SFlrMmNWTEtoZU5ZbjVFQUJnOVVCMWtFcExJL0RoL2hiWHZSaUFuTXBN?= =?utf-8?B?QkpzL1RwV3VxQ2pYRStOY1N5REJpQzk2TFh0b2NJWU1lakprNWw5TExvaVll?= =?utf-8?B?UWk5akRRMG4wT0tIN29nbjZPZnR4SlJWSjF5Tzl6U3JNaXk0OTJmbjNGQnM1?= =?utf-8?B?Y0cwMUJEU2lQb1NOeHVWM09zR1lKUnlnek40UzBrVnFhMU02TUh3ZE9PelZX?= =?utf-8?B?UFhLcitiL1hIWmV2bHpKUnNDSHlWVHJvamI5S3ZMeGF4U0xtM051UGNkalcv?= =?utf-8?B?ZUtKVGZ4akFnRFE5aTc5Y3dTbyt2L0Evdm10L1JPbnIyaEFnYkxUK3UweXRq?= =?utf-8?B?YmovdlFYL0pUQm96eEN1L1p6WnplY3hpQjg2V0xld3UwWmt3VXNET3RIcXBq?= =?utf-8?B?N01QcWlPREtDcnFzYzZEZkFZQmE3RzZnTll0dFlZV3FQWWpMeEZLUFZyZHlr?= =?utf-8?B?WG1LSkhvaENSSnZBWkZDL0t2Q1NvUENBM2xnMDkyVGpnc0ZpNzhOVmtMOWIw?= =?utf-8?B?WXN6Umxyc01RNDE2RHFBVHJDMjM4V2xuVStwVXhNUi8wVXdhUVROV2UwME9a?= =?utf-8?B?Yk9VRXlBQVFtRUNrcURDRWxzNmUrVVBMc3c3QlVraE8xN2k0S3d2cUwva0hO?= =?utf-8?B?VUhrRkRTVENzTEdHL3dhNTNMQWlyM0VOVFpuQk5NMHl5UmNIWUkyR3JBVVRl?= =?utf-8?B?cDIvTWRBMlVycWZoSEt1Mk1XRWxORENOZUVKU0piQ3hTZFA0ODBhWlpQOFBK?= =?utf-8?B?L0xsZW5sa3BsZjBwcUVlOG0xUWhXNEVHRzlJeTVSaW54dHN3d2R4ZHhrTVA4?= =?utf-8?B?aEZ1TEVIVGlZUnNMRk02OFdEUHFZdFBwN3MxQ3pMazRLcFpxRTJzbElmaDc4?= =?utf-8?B?ZWVsWFlSUG83Tm1BMkw1NUhSVi9HMmltZGh6ZVVvK2F6V3F6NVZWOWhwL3Z1?= =?utf-8?B?QXZRQ0pMcEFjdzBYNytxcUNBTmdZK0d2ZWYzRWZDQlJnVXVMV3l5WlBUZGw2?= =?utf-8?B?REdETVE0dzJNaHk2Mnd0eXl2My9DamNNVkNoWXUxVlV0bFpsL3owa21ydGFT?= =?utf-8?B?bXNnMmd3dVc1U0RILzJOUEZja2lSMFA4TURDMlkrczlwWVRac3VPZWl5d1R5?= =?utf-8?B?WlJwMVh1ekhhdThydnlyWEJkcUY4UjBmSEk5ditVaEM5TnVkSXlYbWhXMnc0?= =?utf-8?B?aExmc2tWcUtVcU1BYUI2WElEeVBaYlMxUVk3ODk3cVNoRmFHUVZTS3pUQXU5?= =?utf-8?B?OEFtU3Ira3RtSmV5UHR4akROdEhVSCtlRGVNYVJqZEo1c3JLMFFSRW4zVjBs?= =?utf-8?B?blgzR0g2Y1NQWkczaHlKcDhoNjljSE9idDg1WC8zekE3Wm5oMGxiblkxUGZz?= =?utf-8?B?emJmNzI0czVadys3Sm1WZUQvY1dMZzRlL05Xc2FXekg3M2xHYTE4OVBmZFVO?= =?utf-8?B?YUxSQXpXbllSUGFuenhpSytGQ2xhMFFEck51ZG9vb2lXemFDcDRRemJOak5x?= =?utf-8?Q?hjKiHW8GD8BpBQeuZIgrqiOEsm+AHWEgiw1HWYCpxW7NJ?= X-MS-Exchange-AntiSpam-MessageData-1: yip1NYmlGTMd7A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 743b31f4-c505-4504-f774-08de9a1c9e5f X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:44.1263 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YSFez5JntYQOp364S/J40vjDHzZ7SMllG05lHcM0E4dkwqbJH1bNriiIdMG2dH7iWUA5B6NiJRiRPWTt/6gmzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 This does not need to be stored, so we can remove it. Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index d63af95eb642..01f65d50cbb3 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -256,7 +256,6 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) ->= Result { Ok(BiosImageType::FwSec) =3D> { let fwsec =3D FwSecBiosBuilder { base: image, - pmu_lookup_table: None, falcon_ucode_offset: None, }; if first_fwsec_image.is_none() { @@ -630,8 +629,6 @@ struct FwSecBiosBuilder { /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new /// [`FwSecBiosImage`]. /// - /// The [`PmuLookupTable`] starts at the offset of the falcon data poi= nter. - pmu_lookup_table: Option, /// The offset of the Falcon ucode. falcon_ucode_offset: Option, } @@ -931,24 +928,14 @@ fn setup_falcon_data( offset -=3D first_fwsec.base.data.len(); } =20 - if pmu_in_first_fwsec { - self.pmu_lookup_table =3D Some(PmuLookupTable::new( - &self.base.dev, - &first_fwsec.base.data[offset..], - )?); + let pmu_lookup_data =3D if pmu_in_first_fwsec { + &first_fwsec.base.data[offset..] } else { - self.pmu_lookup_table =3D Some(PmuLookupTable::new( - &self.base.dev, - &self.base.data[offset..], - )?); - } + self.base.data.get(offset..).ok_or(EINVAL)? + }; + let pmu_lookup_table =3D PmuLookupTable::new(&self.base.dev, pmu_l= ookup_data)?; =20 - match self - .pmu_lookup_table - .as_ref() - .ok_or(EINVAL)? - .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) - { + match pmu_lookup_table.find_entry_by_type(FALCON_UCODE_ENTRY_APPID= _FWSEC_PROD) { Ok(entry) =3D> { self.falcon_ucode_offset =3D Some( usize::from_safe_cast(entry.data) --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012000.outbound.protection.outlook.com [52.101.53.0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E0163E51EF; Tue, 14 Apr 2026 11:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167692; cv=fail; b=AG8t0mMlxJmzIweNh/LZsjyH5LIzNyeeRAy4GP9bdHYsV/vJ4ZSl4VivPvrtuSAH092oGJDEcMxKsPAHZxaLKmKoYJDzVYsJwYj3HASmIrFNYCaOgEftYv/D+YjoIw/wNKX8Bs0eMgu/VkD89zOApFXxNXiGlRaTCsg4GLyVpMo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167692; c=relaxed/simple; bh=HzN8gDqBmV6WGGz0Ipp/iB3VWDtmFu/u13vhu/CpBVE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XBl2u08jCJVVorkRnZ1i6G+I3iWk8Q/0mtE37L1o2atcXeA6NW6WTsza1yXVnFcxoEC+p3pVMab68j7JlZg6G5i/9nlZZIY84OvaU8maGSbfB+p4EwMeNWXYhlYw2BJZcNGd7XKbtjLVoXNqWPc5dCJsik7vXaNSCp4twcm9Bj8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=dLb0lnvz; arc=fail smtp.client-ip=52.101.53.0 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="dLb0lnvz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fVXiryuHEUbHk/SivKarGKj0Ob9qpUlamT2mLMkwxXUmvqhL41C5ovpg++k6FG6u5NgWVRzbFIOOlUY4ldqEG3xgMTqLgIDZ4YJFv3SQFvYyJWDQtx67Vm1aSZnkY7QZNSJYueUqVmlu0x0P1x5fkfPpbAebH3ko0BiPDU11+9R2pyIIRU2jzGTwn/cZ3mwaYcVNVXK6+9ON0G3J78qi4wJ1OfbIKaKE/8lywe5DUkrP8neCaRJocovw8GTDerzAzXlAIj2YshQgabsa8PiDVSj7KUsb8SvPnNKmqZi5bRe1e6/1VRK5lhLb0ryFhLa42I/qIdg5BGM2p/CMBMJ31g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=t0zqFagrkwJ+Pk6zAFxMSA8BywMUcrv9SADWVL15F38=; b=g7xc9UZu+HDkyckatznJ6+u9O/Bste446+bNqCUJwaaOoIs/ugRblJ07QLIHDtYL9VGrAa2H3bZsGt6cjMJH6Cgx8oYaeHvwbNm7Vv1xilEHF/9+MCdvBG9XU0U3pFYo9MW+IztXBv4R/Mqnk+NIysJ2DaWGdnToRrFr1nlYjGso+7Gtz507+lu/JscyaJ8IwXMgQFkSHStukXDc+04x2DpjgQf5fmwVRBavHyvnP4J+rU0XV++iIxxugUvA1JLhDGQHJLyZiaMpql7y+g/pojmqvvFgwuzEg65PHQT3iMn+pSlp1qWGcqfcZDx8Q87bsutOsr46GrTJ6nbOy19PUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t0zqFagrkwJ+Pk6zAFxMSA8BywMUcrv9SADWVL15F38=; b=dLb0lnvzCkRdLNlVFzvKVGnb+Fmb7w/mwSOSrebJcjKDSiOaUk3XhSh6feLtBLX5cYsOlqDTtq1YII52RkKJG1KggHzmpAacBHOXQlGrzKQdtkmMvmcr/nOmhjgXliNbDe4gAaP0NLMbxt/9tXfWVCJlACxTcHbVVMnkL25SXDXvLV4GolhnELJUL64gsl8RWrANqqMEJb6WaL8cWtIbOvoVtp3miw24/Xnp5IUQc21DteDp++5wZVLcpiosTBO73GKXhFbtqoJnm/PdjJyNqJQ54SoWBlZ3aeDmhJD/POiuo/G8yFapGroM3XPQxJeTitrQhunMP+nIEQrSkaT2UA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:47 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:47 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:11 +0900 Subject: [PATCH v2 08/11] gpu: nova-core: vbios: compute FWSEC-relative Falcon data offset Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-8-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DM6PR21CA0001.namprd21.prod.outlook.com (2603:10b6:5:174::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c5a3436-ea9b-49d1-d2ac-08de9a1ca066 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: ckMBCgDRhFOSLsR+fqomq9kwnublXNX7CnDtOJEoZ0QOYeJRMIPHz/Sr3bl49g9GhF2TfAL8rCEeQOZuMIpt9cPrpxjcNSB1bAEK1+fAUJRP6TakHSedIVQyYFs42Zhwkj8N6vKkxid9r5sUg3PLF/jYNuw3hgA3YvCEkAi/ChXDhhza/iGIpOMvstRSH1a+oAeoVFtpKicUM5kQjli/aSh9tZznX1ilkN98mX/Po1+Z5bxGOjVrc+U20jwF/bbmZa3g9NixDRnWhof5k0N3i3GQ7LTCnEpSuITK6DPQeYP/shbSlp6goGgKP9php2qk9zz7sDQ+bdM+D8B04fKcLnHT1Z97IYCoTa1rDdTyF7Bsh6560NlrertryjeubVePZe3hhlqT10264nitfPqz27iWSON+3SZwDWVHtyzGTaWp14Newir8gnEyJqcG524OS9m5E1J1wYA64RgqT6qNiSm6HoVOC/9lmkiDf7o6IudTZ5YSajI5o69azefjzwRDs7pYZtQr6MT/fJMn++TFFykYFjTqmF3AT5YPotvxtpZnEUcJzN5/iJpgX86BOIgz4DapK1epDK9YHzxZLR0kAXgsfK3JjBTmZ6Qt0sFPa5wVkGRjAUU3y/T9vj9cO+NpNnUByif5nT8obSXS5X18kMw0k+kVqROhmNY61H8Rr6nAxssnioop56XflxbK2B9fsYcPll9eWvTzfkVd2/xuitRwLd+es8HmLNfTxoDB8G8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TTNsbGN6dUEvMEo1S2RWQVk2Sm45OHRmakVSWXJGWVFMcGVQYkU0OHlKRDJt?= =?utf-8?B?L085ektzZVBWMzNCUk9IYm1SbEVFdFpBU0p1ODFuUDZqbFJNU1pPYTcwNTdS?= =?utf-8?B?WFhuc01hWFZvNk9Ud09xUk9JaUhVV2JUK05YYTdKaVZPYVVrWFB6V3drcTUr?= =?utf-8?B?WWdTait2Tk1jS1ZjQUxsY2diZ2tNWkJLZ0YxSllDUGJVYlFISWVjcGNuSE5J?= =?utf-8?B?NWNycUNZWDdZdm0zUDUvUDlFZ1B0WFUzM3E4VkxSN3lSOGdNN0lwRVZMZkcr?= =?utf-8?B?djlUSHBUeWMvZkxTQW1MQTFNbEozK2pvWXdFOGlpMzMyMnNld0NZeThWNW9W?= =?utf-8?B?MGlwQUxSNWNKTjJGTk9wSjRYTzAycW80bUwvN0psSlFrYUpxakJLckoydzVN?= =?utf-8?B?cW5DYVlkemFEMmxMZkdkZnBqUWszWlFpclhSZHFpWjQ5N2xCVllKNGZtK3F4?= =?utf-8?B?cmlXRzhNV29aVi9OTk9PTWk3MTgrL2QrZHRnUFVycnBZS1VLbHRBOWlDMEZF?= =?utf-8?B?RjA4LyszZGczZERMcG5Lb29uWC90bXE1bG9nM1R5ZFZXUWtTOGpkdy93Ukc2?= =?utf-8?B?UUdGT3c5emhLMmdvYmtxMU5rWlMweS9FQjkwRy9yRHE0TzZiQ3lXTlF2WFBF?= =?utf-8?B?ZzI0N1pyZVBYNk80VTdacHA4L1BtRlEvMGlibnVHK0pYcExUMVdsV0lIYjZQ?= =?utf-8?B?VUpVMzFxMm1aUHpTSTAwNUJkUGVmK0swbC9FWER5MVVRVjZXQ0RmRnNmd0gr?= =?utf-8?B?UG1jYkhBM3hUcldLL2VvZ2pHVjgrMStzdC82NytPS0pSTFJFcnBoMWZMRWJF?= =?utf-8?B?Y3lKSHhIb0VjN0tBUVlmdFRSKzc1cUcvbVQ0REdhbU1WZjhqalZCTEo1Y3VD?= =?utf-8?B?enFsSWFrak8vaXdkSytLVXBIOTJyNVNqc2liMThoSWZNVHhZMytreVEwVUMx?= =?utf-8?B?OGlUcGdFczJXTHpRZlhxQTBteWFqTDByaVh4ZFp5alFNQVhTYVl0M2hQeE9a?= =?utf-8?B?UTFZK1hVUEluUU45VFhqY1NIK1Myb2FDMlREMkFwcG1ubjFOWWF1U3huUUc5?= =?utf-8?B?TU5DZDVQTzFFNXc5VFNxS1EzV0p3NDhpcVczc0tsa1FNcVhnaGpiQzAxVUwv?= =?utf-8?B?cS9pbzZpUlFUellhamdCNVkxZVhNamFBOWxWTjdJcEw4KzJMSjV0ZVYvQkgw?= =?utf-8?B?ZnVFUGx2YWg1TlNJQ0VFaDFDbGJFeWJ3b0ttUlRERDc2dmtSeUJpY3dyT3h1?= =?utf-8?B?L3JMUkE5SWRmQXMxNmlXdXlJblBxY1g2S1FGcDJ0b0tPVEUyajdYeEE2T1lM?= =?utf-8?B?Q2hMVHlzSW40QW1TUDVlM0VYQ2kzQ1ZRVFp2bVhJeEt4d1lLVms3cll2TEJH?= =?utf-8?B?d1gzNU9KMnFwWElqeXlXOW9ReUVjNTBRL3JaS1dJaFNXd0RJT2g0MFFGMFpu?= =?utf-8?B?ZVFwb1krdmFHdUVGR3Y5NE8weWtWcllxMnh6dWRRQWhoWHhwam1lOUhzTXBr?= =?utf-8?B?L1ZPamNHWjVQUXgwc1BrTFB4eHpWcDVOSmlqNWdGdE5DYUpMV0Nud3dleUFk?= =?utf-8?B?RDBHZkVRWmhhU2hTVVhpZkp1cUZCMEs5OFI3M2VTMGF0K3JXaENuOUlJRm43?= =?utf-8?B?Sm94d25DZURuY2QvcHlZQXlRRDNueWZlMHNoK1JzR29xc3RsMDdVZHhXUm9H?= =?utf-8?B?KzE5d3FteFUrTFJNdnJtcTJZY0ZMSkVJWGFVMGlSd29WMVV4YURGdHQ2R3kr?= =?utf-8?B?SnVqU2pNVmFiY2w3RHVHTG43QytEMG5Ec0d6dDRqZTM3cXcxN0M1dEY0Ky9P?= =?utf-8?B?Z3ovcWlpQS80VUM3UlFka1pyVDRqNHhEekpaQXRUbU5Yb2JWdkVHdE8yNlFk?= =?utf-8?B?bHlxYmtqV2dTdXpsUlAzWHZzcnNmdDgzTkhyTUVNZFBSdnAvQkdFbUhnOWcw?= =?utf-8?B?aU9INUFmZXJLdEVPc2JWMEIwbUxPbFVMazRBaHFybVg3SzhSZXNwT1p3Uzht?= =?utf-8?B?eXBaenZaMG9DL2d6WlpVWTcxUWdvRHhSSjRpbEg4ME9KcGtxUWRPclFtSXlS?= =?utf-8?B?REtjTVdONEw4cTl4ZlJYZTJKNkwydy8rNkZXaVhkQnpadXdlV1RhMmN3L0NC?= =?utf-8?B?QVUxeUV5R3JYelhVSUZFWWpqZFgxY3JMYWxtc0NqR3JYQkwyMkpxMWVnZ3BJ?= =?utf-8?B?dlRvOHAxcDdSdEhIWE1TaG5tRitaVjByOWZqWHZXeWtpQzFmOW51aEdJTXFC?= =?utf-8?B?NGFJVUtuNXBuNWMxL3RENEN1VmY5VmxrT2E0UWp0MzJYa1BCNDMrR21kMita?= =?utf-8?B?UGo3ZW1tSTM2Qlg2T0Q1dDU0Y2xxU2tFMUxEVDJZZmhrRElyaEVwZzZ2aGxI?= =?utf-8?Q?NSFHPizEDgx+nTd46WFZvIuuTPTjXqdvrSnA6gj19nFCP?= X-MS-Exchange-AntiSpam-MessageData-1: Ym0QsyaF/ifTxA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c5a3436-ea9b-49d1-d2ac-08de9a1ca066 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:47.5744 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zvOWnwwSmzMvu9ShIQ9jyPF0uNfV+FK9m8U3bATuv4aGoGnl/KT9e+1BsPg1qyZFLMMfbSVKMZJQrPurLcaUpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 Push the computation of the falcon data offset into a helper function. The subtraction to create the offset should be checked, and by doing this the check can be folded into the existing check in `falcon_data_ptr`. Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 48 +++++++++++++++++---------------------= ---- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 01f65d50cbb3..0c0e0402e715 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -765,33 +765,29 @@ fn get_bit_token(&self, token_id: u8) -> Result { BitToken::from_id(self, token_id) } =20 - /// Find the Falcon data pointer structure in the [`PciAtBiosImage`]. + /// Find the Falcon data offset from the start of the FWSEC region. /// - /// This is just a 4 byte structure that contains a pointer to the Fal= con data in the FWSEC - /// image. - fn falcon_data_ptr(&self) -> Result { + /// The BIT table contains a 4-byte pointer to the Falcon data. Testin= g shows this pointer + /// treats the PCI-AT and FWSEC images as logically contiguous even wh= en an EFI image sits in + /// between them, so subtract the PCI-AT image size here to convert it= to a FWSEC-relative + /// offset. + fn falcon_data_offset(&self) -> Result { let token =3D self.get_bit_token(BIT_TOKEN_ID_FALCON_DATA)?; - - // Make sure we don't go out of bounds - if usize::from(token.data_offset) + 4 > self.base.data.len() { - return Err(EINVAL); - } - - // read the 4 bytes at the offset specified in the token let offset =3D usize::from(token.data_offset); - let bytes: [u8; 4] =3D self.base.data[offset..offset + 4].try_into= ().map_err(|_| { - dev_err!(self.base.dev, "Failed to convert data slice to array= \n"); - EINVAL - })?; =20 - let data_ptr =3D u32::from_le_bytes(bytes); + // Read the 4-byte falcon data pointer at the offset specified in = the token. + let data =3D &self.base.data; + let (ptr, _) =3D data + .get(offset..) + .and_then(u32::from_bytes_copy_prefix) + .ok_or(EINVAL)?; =20 - if (usize::from_safe_cast(data_ptr)) < self.base.data.len() { - dev_err!(self.base.dev, "Falcon data pointer out of bounds\n"); - return Err(EINVAL); - } - - Ok(data_ptr) + usize::from_safe_cast(ptr) + .checked_sub(data.len()) + .ok_or(EINVAL) + .inspect_err(|_| { + dev_err!(self.base.dev, "Falcon data pointer out of bounds= \n"); + }) } } =20 @@ -908,15 +904,9 @@ fn setup_falcon_data( pci_at_image: &PciAtBiosImage, first_fwsec: &FwSecBiosBuilder, ) -> Result { - let mut offset =3D usize::from_safe_cast(pci_at_image.falcon_data_= ptr()?); + let mut offset =3D pci_at_image.falcon_data_offset()?; let mut pmu_in_first_fwsec =3D false; =20 - // The falcon data pointer assumes that the PciAt and FWSEC images - // are contiguous in memory. However, testing shows the EFI image = sits in - // between them. So calculate the offset from the end of the PciAt= image - // rather than the start of it. Compensate. - offset -=3D pci_at_image.base.data.len(); - // The offset is now from the start of the first Fwsec image, howe= ver // the offset points to a location in the second Fwsec image. Since // the fwsec images are contiguous, subtract the length of the fir= st Fwsec --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012071.outbound.protection.outlook.com [52.101.53.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AEE43E5ED8; Tue, 14 Apr 2026 11:54:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167696; cv=fail; b=HYC03e8Qona/MC+WYXKocO3hJW/V1b1coM6SG1KeNcd1tXEnwf2ogTA6NILPoqW3nGMEC2SODCc1rudamM+hLnlr+KqKb2TtA4dQ5kpR1wsqR4OaSTBtmLdMijhD/hSl6GpijxhUv0t4c7f1ZNYRqktFZico5N3wuuA2QXliyxg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167696; c=relaxed/simple; bh=/F/Dxccytqo9zNgwP9x1yV9g8jfevKmuMxLZOO1vXGo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SmilXwHG46kAgC5ZUK6eOGPGNP1sSZRtGlcg97Ug/1Vni/W5eFLHt6YgoipenpfGASFdwmGoyxc7iizG2EbrBsCLb33XVILCjxSs42fQB/TWtOS5YLxRHC8fqEzPcriTQMUlBYs6rY36+bwghJbpE0HLzVElryqa1EvkhAv1Ykg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=SLz5/Ck4; arc=fail smtp.client-ip=52.101.53.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="SLz5/Ck4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BQgpxvKLxssfTFXI8A+o8/QCvHT8J12RYBvG0zytF2uHwkPdEV2GluiYL0xasYw32hC07hpws2HwVrhHDDVLJqVzLJgAM4cREhtaVd9tOIaJqxwuU/0DLXuESyrEPijqPUifdP1vTnBlR3jvprnLnniy+84hQ0py5D7UzGLw2quWH2YqyiE0rH80tqNx5fONN7If95741X9psecZNxp894rFhjpeROQqKU+4DvckeF38fj3fx0K+m7/1Us1AJey4eMSU4wq9aDxoM9B2gViDQGEEn0IxTeZ50uo7is9j4w+Zl4Nwrqp4NCHvrCzvMopco/zwNaOnwDmXaIHgn3PFZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qvhF4+dbxjOmvZtl7PBXUzODc9EkBziKizQsGacyR0g=; b=r4SuQGMue1LzqLX1ZeMw4KmOxntyOgZLi/5W6gNRZsz8UYQwJqfZeXsW4ITjBcT2XPIm6+e8Ix4pFTFsAS3gLPjxCqNMa1YryfoRcFHYGwg8PsSJbQ3ZqQtX0PMHcUvhlb0/nbJs4x9SD3uiaLRffQiRSd6C6gwkeojvYAgvLNQ+opDxHhUSV3p/Iy+QhRMzM5oDkrUBMe+WxrqwE1HShW28e9sGX87KMMSEZRFt/1ZyvHfaLYX4TmJNWS/Mr4TkGdDn/lU0OD08dEPgBEj2boP3U7fWmQqozo7YXpCSRzB3WHh9thDs/hlVK2jExQQwV6COCYINq/CiQoPBKJRmwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qvhF4+dbxjOmvZtl7PBXUzODc9EkBziKizQsGacyR0g=; b=SLz5/Ck4Bw37KLFss5AVv0Kyl7PiT8sYuOEBxuWsOt3vYt7vKLsnoIqoc5z7LpAiDJbl7H86lWuhzyI8L00JHwLSwOcfucROxy6C1jO88lRT81aZ3dVj5g3jDU4fMFs2gyE2saJjfa0OgYP9MbaG7sRiodeSOW7LADOGj5/finTxp3kWW7kbU27tG96suWFQLmXJmQexmyonelGUfzMjPesCGj0Fa4Ibo/VZoInParSOl597g02PtT1h6zQIf0x1edbDT5pRF5UAazy7Dj345sUkB1rPbVx5ZUuleaK9ruUDZ2eSlxxjZQSWKpCYhJpmh5UsOKr8Od/nkFl7VYYUfA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:50 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:50 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:12 +0900 Subject: [PATCH v2 09/11] gpu: nova-core: vbios: simplify setup_falcon_data Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-9-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: DM6PR02CA0141.namprd02.prod.outlook.com (2603:10b6:5:332::8) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: a0e6bf7c-6400-4fe7-68b0-08de9a1ca256 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: s2/eFZ9tG+Ng0//GBVY0I2rL7aflyg0igCwvpMjQ7WYquEIcqvcSpqBOxadQcF019Oe4RZ6ZgZJRiaxLUHSoK/yN3ktOqN+SqPjysltkXHajsli/kiQMPo4qTMb4lb+/JShFGwWfTlwJGMoR3cxA3utvUf4qI2ePOWfd2S0ZJmFZXzp9msQh061NwaXhCLS596HB8fG2yAMZNGNbGSlEv0i6tmxCdJSxtk8mhafdnyP4bh1jU1INTC0FgK3jokQ1E+xOjCCOXZ3pmkdcTW9TvMGj++qvKYMP11rzo/Ujk4dKcld9JDB8W5lHFyWcaVGuNWB9Z+DoFPboGWkoJK5RFvPyrQ63wfYl1FeRojIc4lKfZv+DIqky0SdI5e7Z5m1pww5uGL+fjnk4ebUN0jRCwObwOeq2h5fMwRfzIGFjRBHj1BoI3Wd1omXaKDkqmkDLfosPvmBvsskdeasLeZZhRugjh7opTnnRXu5F3lyc0tlZehbiSeBpwm0gKzOLiPWpktGrTjvkfBUubGS2SkbGfOk/5KuQrj4wSKNVUAa6nqR211WLflIyLu+d6QCxrfMwhtZj/DOpmUTcn4+p81HaBVlxAe2EfwqHdubFRukUIlbXQEAUSfDmAcCpcQ7DBchsBoJF1GtPqgQ7uvKX9xsjAoKuI7sEvdbeJpb/zSiddF7DZGv5qM2jSUiq+zhy4vQywHhXZCoOvblxDm8aJotexvBLxZNhfh51y+lLJz6BMnE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OTNSbXhrRnptSSs1S09jeVVIMERVem4vY3NtdkUzL0xCQVVMVTl5V2wxNzNj?= =?utf-8?B?dVVhSmVTTkJzVUFmc1hXeTJlcUdJQnBMc3JHdEh6OGtWMmJ6RTlkR1BQOU03?= =?utf-8?B?MFZUeE5IOEdwVEJpYlpUS1B5bEh2cGpEUjh2d2pIc21URzZZQ3pUQmlDaXFk?= =?utf-8?B?TSt4dE5XU0tIMXBJeXN3clBDRU81NG9ua3hjMFllaS9aQWoxT0psMzdEYmo0?= =?utf-8?B?c0F3WHJpMmQ3ekUvb1FzVjlsWWFDeVN5OXNKQXRBTzZqaU1ia1RqekpvVmRw?= =?utf-8?B?TDN6RXd6MFR2VktsUGJwUGVxYXk3RXI1RXRkZFlhVisxcEgySUNnSXhRdjZN?= =?utf-8?B?ZTkxTVVPOG9lN3pBZ04xUm1ycUM1OUtLdlZEdUozNWZ0TDJLbTBKTGxrcHhh?= =?utf-8?B?RFVwTFhRQTBrSlJvbjZhT1BNbVpzdG9FK01jd3pPcDM0YzRUM1RWdlNIRjZ3?= =?utf-8?B?R0U4L3NObnBBRytpUDlHNHg0Z3N2d1NxcUJ5a1ZRMGVtaXZoWnZMWG9kQ3Vv?= =?utf-8?B?WjNrWktQcjlYa2p3YnBmMjFMb2cwY3pGdmZkV1dOaDk4L2k1ZjkrQXRUdHBp?= =?utf-8?B?ZVdFNE9UV0M0MERDb241cmcrWUVWY2dMbnlYa0dIVVFXMGdlSGJqZmYzdFh4?= =?utf-8?B?Rlp4cnhGUmVaeHQyWnlJRDFNS2EvZnA2amRNMmZkT3NZZnY0WStZMjVPUHh6?= =?utf-8?B?RDJOMHY0MWlpQ0VvVjYwbVpmYUladXM3MVhDbitXK25UVTV4UzlnOG41djZp?= =?utf-8?B?R05YRWhnMzQ4R0VYZUF2ZmhZOGd6Z1pSRXFpNG5PUDY3Vi8zQzdJckEzRE1y?= =?utf-8?B?d3AvNldJWi9GQjVpb2FvUjRxckRMc3dJbkEwckVEVUdHTUxqQUxScGkzaFFD?= =?utf-8?B?bGdsZjkwanZWRjBRRDZyak82a2JwS3daSWdlQjl1ZCswb2drV2dVeVcrOU9z?= =?utf-8?B?Y292YUMvcDR1ZWlzcVF5d1hWZ0pqMTV0elhsc3AyNzh6cHgxOGxmN3BwUXB2?= =?utf-8?B?UExOY2I5RE5iaXRmYzkxamJVNlgrQ3ZlS2oyWi96KzNiL1FMc0pleWRLMVZB?= =?utf-8?B?VXNMMENlc1BWUHFJdmxadDhYajhZc1B3RXArYXVVVGxTMzJCL2U0VWhoOTlV?= =?utf-8?B?UEtGUWYwWmZUNEIzRUdIRGMyNTE2MElZUWF0Z1oxWlFudk9zVDN4Z2xvM2dw?= =?utf-8?B?Z0FFUmlaWU00VWV2TUsyVVlMR1crRnZ0WXVPcEd3bjNVaWU3UmxTZEViNytn?= =?utf-8?B?WWZNVVZHOGhxcDNyYXZMbUVpZTU2UG9paWVZQ0h2ZUdlUks0cSsveU5IZENs?= =?utf-8?B?WktlRzY3aEJuTk1rRElKRVpSVm90SlBRbE9jU0RPRGtEYTJwMS8wQXYxKzdR?= =?utf-8?B?RTc5dGNoS29XZFI5K25aSVNDOSt3VHF1MzloOTBZVTBqWVppa3BjY3pWbUor?= =?utf-8?B?dllabUFMM1p0K0drdzM5eExLS2FHZEgzdkcyTlJxY25yU1o4ZGZoQnMwVm9R?= =?utf-8?B?dlFBdXUyT1Z0R2VEd0g3RmFhdmJsVDlZeVpzdDQ5QlAvbFVBeWpoZnAwc24w?= =?utf-8?B?d3BPQ2NUYkpvTTNuSGt0ZzdObE5Fd3RGZXArN3ZpUHFJcTBpVmRQd2M3YzJk?= =?utf-8?B?RjdFTng3Ky9DQ0pCd3d5dFl5TUFNTG1yZkpxY2RDTEllU3A4UzZabUJEQllh?= =?utf-8?B?QjBnV0s1bUZZWm1EdDdnSE5DSndLbmJ2bmZjVkYvbDlEalNRakVMY1VSWXJs?= =?utf-8?B?dmlpYStBakJTWFgwSXM5VWlGUXVTaW03cVBBbmZSWjFnb2F4eFZ6TUFhaHp1?= =?utf-8?B?MTBrRXJtQkRFSENUR2tZY016cFdhRUlqRUQ5aDFQTTErdjRaU1hNdzlSQ1BX?= =?utf-8?B?a1JBSWYzMDB0YlFNa25ITmxvWUYxcUtJQ3lKa3BDTktqVGYySGZNdzFXTlZh?= =?utf-8?B?c3NNTnhUYUxnWUY1UDVLTzE2dk9EQjNRUXNsRVJnUjkzZldUVkVkSVY2VFFx?= =?utf-8?B?REJEUFVaL1k0UDVEQ3VqQkVFV0wvYTVkK0Z5S3JJU0RtYm9SMk55ZkY0enNw?= =?utf-8?B?NTViK0ZDcWV3Z2R5Tm5oV25VRWVML2tvTGFnei9PZFRCWDhWRVRtMUN6Zjg5?= =?utf-8?B?Vk5TcG8vblVxOUg5RldYQ3lZWEhENUpLWjA4aFoxTXZDN3RKaHR0c2pqcjBM?= =?utf-8?B?ZCtMYVk0VEFRZDRVTjdsSkRybDVIem9nOW8vSUVjR3ZsT0xyWm5OQTFiVGVS?= =?utf-8?B?eklFWDYyM1NpbHdLRHVQbHVkKzNuZCtKQnczNDFVcTJySWlURFBCSndscEEz?= =?utf-8?B?bkhNZDBrU3FDK0dhbmtlTDdlNDZPTktRRFVJSGlKMlN1a203Wlp2WVU2OGE0?= =?utf-8?Q?9HwlkdynaODXsJA80FZAO4GDcauJz3tiyzVcJ07j4husg?= X-MS-Exchange-AntiSpam-MessageData-1: DMLadJz5Kf//ww== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0e6bf7c-6400-4fe7-68b0-08de9a1ca256 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:50.7622 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: S/ovxHLiRNa3L6RwK0dzkuYl4BVcr0tRfbNZokv/0MSTlfG//3n64glBhIl1IqN/CaaFo+QQwGXTy2r0+qNE7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 Remove `pmu_in_first_fwsec` and reorganize some code. Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 59 +++++++++++++++++++-------------------= ---- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 0c0e0402e715..d71ff5de794f 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -904,48 +904,41 @@ fn setup_falcon_data( pci_at_image: &PciAtBiosImage, first_fwsec: &FwSecBiosBuilder, ) -> Result { - let mut offset =3D pci_at_image.falcon_data_offset()?; - let mut pmu_in_first_fwsec =3D false; + let offset =3D pci_at_image.falcon_data_offset()?; =20 - // The offset is now from the start of the first Fwsec image, howe= ver - // the offset points to a location in the second Fwsec image. Since - // the fwsec images are contiguous, subtract the length of the fir= st Fwsec - // image from the offset to get the offset to the start of the sec= ond - // Fwsec image. - if offset < first_fwsec.base.data.len() { - pmu_in_first_fwsec =3D true; + // The offset is from the start of the first FwSec image, but it + // may point into the second FwSec image. Treat the two FwSec imag= es + // as contiguous here and subtract the first image length when the + // target lies in the second one. + let pmu_lookup_data =3D if offset < first_fwsec.base.data.len() { + first_fwsec.base.data.get(offset..) } else { - offset -=3D first_fwsec.base.data.len(); - } - - let pmu_lookup_data =3D if pmu_in_first_fwsec { - &first_fwsec.base.data[offset..] - } else { - self.base.data.get(offset..).ok_or(EINVAL)? + self.base.data.get(offset - first_fwsec.base.data.len()..) }; - let pmu_lookup_table =3D PmuLookupTable::new(&self.base.dev, pmu_l= ookup_data)?; =20 - match pmu_lookup_table.find_entry_by_type(FALCON_UCODE_ENTRY_APPID= _FWSEC_PROD) { - Ok(entry) =3D> { - self.falcon_ucode_offset =3D 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 n= ot in second Fwsec.\n"); - })?, - ); - } - Err(e) =3D> { + let pmu_lookup_table =3D pmu_lookup_data + .ok_or(EINVAL) + .and_then(|data| PmuLookupTable::new(&self.base.dev, data))?; + + let entry =3D pmu_lookup_table + .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) + .inspect_err(|e| { dev_err!( self.base.dev, "PmuLookupTableEntry not found, error: {:?}\n", e ); - return Err(EINVAL); - } - } + })?; + + let falcon_ucode_offset =3D 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"); + })?; + + self.falcon_ucode_offset =3D Some(falcon_ucode_offset); Ok(()) } =20 --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010050.outbound.protection.outlook.com [40.93.198.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F28D53E63B1; Tue, 14 Apr 2026 11:55:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167702; cv=fail; b=Zrv4xJux06C4IkwepLbzKnG9Jrq+sNZDsE+Dbp/0PosBxSJcN4fjoLq50301ku5J37PF4a7fNEn3wzmOaRCURP/8Y33deUlBXfUMyblWPFG9HYkPtvvhG5qVsfTgbh+yteIzm7uo7/1wghZ+FBlOh5FUEOrkzdyaQE+7OMtzh4M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167702; c=relaxed/simple; bh=LO3vdbrQMlgKCMjmNpRDLiyDqT0xgJzHkRQ10T1wGnw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=THTZ3xsvVtz+he1LaT3jJ9VGXsEbLoIbOt18ss+3lApg+J1wINNv3yoRYw7ZNsbiclQrwba0kn7vPkEqKkiVRAmEITVUYq01bsuzQWj8r0HN5jCKfOqZzvunP/eDsNU73qlwgnEQcNY8V7ey/Y3IVBqR8MHdaVVQDo/96CztyCs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=mnMy0CBC; arc=fail smtp.client-ip=40.93.198.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="mnMy0CBC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eFLEhqtxTS8R+wHQaOP+gkm3QGY9t5J8Gju7MPlHX0WbCtSw349jBQzTpHE0FHf+bAgWuAW28a0c4boacNUChzvIb6C74nsTppZRuSDq5ESLgUp+XtsIJebw+G2wdWALfbXCTdYOVjN/t5y3MvGcgYqHvkrwgkNxBuQKYeDu2XMoCWAIk95acvK4sLrj8/xabKcQY6//LnQOUL/2fJ8dhvRrGTQ5Y1KYcuvH5+HVZ3mp91+7p55h14HXs1dnqVi6golwlViWppOW03sf/H+34SbDwuUfZk4PkJkESyG9LFfg2UB+FFOYSA2egvIVYlLMIAbKxRbACUezXn0iX6/JUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Pk+xizTETqPHAOBT1+M127GSswaa6SBqtydg9r2CX/E=; b=BexuZUwdSC10rP+PI7hJ63JmfZHrtdVOmhNY8MaRgcTJNYyB/g8bjd9U7UIbGj0Lw5X0FjgLEFHtYCYSjkfqxQQNgO34exHlXeUOlEr+5W/Kf01hBSymW9kinCMOKww/fJHGe4Iye3ok8d2oDmq3J8t2+hTB0MEDZVeyqfkd1VMytMrE5xWq4q4PYl+w68ZlF6/OTKOj68Cuh4rW/Ij0OMiQS+pqyMJMDJ5HaHXu9F/mYNJgfG71zFfOWwokGHxsKAcTll6jcC21ir9cvgUBq4U0Tof7qLKJ/5WUngg3MOzPrwRvn2ZwC4/eUdCiKgDfnirqq2zWth+zKf4p8XMHuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Pk+xizTETqPHAOBT1+M127GSswaa6SBqtydg9r2CX/E=; b=mnMy0CBCuc7u4qomf6JjDjzNGFMW59v74LIO3cjDhQWKXDtsOz7QbBj+Ly40dIszArZhyosPBFO7p4IYZVF/zHu6ylEMAfLfw8ivAxpmhTQzKeZNzB7QQcK1RPWEfOr9Tm7kKYo5MQsmVA0RCYk+eYXAo3rDU2rrhQmui1ADT4/cKnrxz4lM/5uYi0bjmEeZxGDqqdj72uvUw/6XR4YmVI343wGY/M4xV7reFLDicTl1tyll5g212lFaosTLUbBskx6FVT4x3xsbKlF1zgDuwaXmkTQre6CCBZR5FSnrI3YBQTkwc0PkGG+FAfCO7H60nd6splzk7fgEwlqyTSXMig== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by SJ0PR12MB5636.namprd12.prod.outlook.com (2603:10b6:a03:42b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Tue, 14 Apr 2026 11:54:55 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:54:54 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:13 +0900 Subject: [PATCH v2 10/11] gpu: nova-core: vbios: construct `FwSecBiosImage` directly from BIOS images Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-10-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: TYCPR01CA0102.jpnprd01.prod.outlook.com (2603:1096:405:4::18) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|SJ0PR12MB5636:EE_ X-MS-Office365-Filtering-Correlation-Id: 880306ee-8fff-4c40-8229-08de9a1ca4cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: 8WMkFIRaGqHwzPVdhrh1duuG+7sBC8GkUMLbDvo9xER/52n55Nw+647ku4vRy7rE8t5unLQrE3j3Ys70pBVdvJy7YzwsAXDyTc+QVMO/LuMzHx4WQjTEHwUIdHWwVWIdhjeKLlKbYCXJnrxwuB+ljeXULOwFLBQBlmy6M7NMvsUnj0S8IsGwIP3X5xgmvr95tKkgkUliSE2wYjWoQ67bM9M7ldO92UjNkHNNXyLFogimRqgX6w2nfBnuBh49Y3m7aUp0VzRUNN7wbT5c+3DdFBudT+KZDfszQAUJ5Xyon7fK87dBG6ItcOhJgHURHD3t0a0YZjnG5w7UNFPX/spVXBKUrwuSHYiXNtEwUnDJEvVkF1GOkqE7+5erl4t0HqqSb+eamzDpa0OAKIJ/fQte3ktCSRmmPn5DbFR+gtVLN0w5VG/RnflFQHjNYixV1ESCFIOr7rLshDxHl3uOZvxqEKokj9St5nhFUiICqKe0Rux/JHvB5g21WkzRySYUb8nzCd1cJkW1QVgxjCt5ktwXrztjkb9FZMx6gamJStTSTV6oenN0vwXJ+RlwSKcnq0g7sT6v6EU0X5+A7iSEYBht1f1RArW39UsUHn/KS0YwCbURk3QQT2oHf8b9D10mVrWnlT3WReSbLVKWtsfrDx40VhxXgkg2Ang0DIUbDlK1+fH5kQjc7dUm/3RQyzLgj/5fualc8FFr7KUJ3vHatt0zU4NL7XPeWpPdxmfCroyeVLk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UGpyTy96NGVxbXF0bkNXczlIOG1pd0swS1ZSTDUwS0RwaWhMUE0wNHJMcFhy?= =?utf-8?B?TmVFQ0Y1aURPOGNOWVI4dkRzRkpJVkN1c3ExS0k2enBFN3VJRG50aElmVFhX?= =?utf-8?B?WUpUWm9ud09ITTlZVVk0WHZGUXBXSnkrZ3JDRzlUQUYzWlhkeWNBZUNBQnN3?= =?utf-8?B?L1VKb1hKdWw2TWE0Rm5INW9oUXJjUDFVTDBRdXViU0szdlVNTlVQeThCMmdG?= =?utf-8?B?Y2Z3ZHU4dFhSWEEwRjFSYTkzS1RKY1paZUFYZ1NzQ2toeWVLVXZxWFdjK1cw?= =?utf-8?B?NFRTL3F4dlNyUWhTRFFzNTFRcXVoQmVwYktsVWg5a2oxQitqVmdwdGlqbzBN?= =?utf-8?B?ZWp5cGhHV0xSUzhZWXRSMmNFa2lMbHJqU3JuSWlJcEpiZldNMGN0R0dhN1Yy?= =?utf-8?B?OG92bkY4Yktaa2s2dVpvOTN6WGgxSExTVEpvRk5HVHNRSXhCWUUvRWVTWGZq?= =?utf-8?B?eE5XTFVaWlhlQVBqWDhVNWhQTEZraThsaWQyTjlXSHBHMkk1RFZHVHFqSFN1?= =?utf-8?B?SzhOdmdOc202bnIvWkEraWtZRmJjUkd6MEZQVGFuYUFEWitqRnJSUisvMndW?= =?utf-8?B?Zk9TVHVidS9qN2poSnBtemdlUEJCUmpCd2hVSDQ2cnkwTXVlRXorWmhMTG5k?= =?utf-8?B?aXdOOEZFa3BPRm5hRmdsYjNhdUNJaWZmazBGYXdkV0FFdzJRZWs5K3RMRGNF?= =?utf-8?B?RWJ0UWxBZVArYXlwOG1RbXl0eldSNWJ1K0JJZmViZE1rcU1Qb0U5MExxZjlV?= =?utf-8?B?WDdZa1k0bDZzY1dTT2VQdzZtM3FsdXYwOGZ6ZHEyeElZVXpJOGVONnhqeDN6?= =?utf-8?B?TzViQXplOGMyYVdqODBpeHlEckVKVEliaDNRa1RJSGhkeG5SZURhby9zVnht?= =?utf-8?B?YUF1bW5RTC9HUitPZ3lWcm5ua0Ztczk1d1QwR0t3cmx0elBqZlFzRnFDb3I3?= =?utf-8?B?MisvZkJwc1RxL1lZM2JtOXd2NTFZbi9mT2hNUnpKU0ZkdTZkNDdCZnZpak16?= =?utf-8?B?d1dqMTV2cnFQbVRxME9qS2lvRVVOV0hlS2RsRG5LRml5MnBQYjlVN1pXU1kv?= =?utf-8?B?UGxOVng1UXJwVWo4TnBtMDAxTDJjTVkrQmtOU0ttM21NaGlLVkVuYnU4NXJs?= =?utf-8?B?Mk1wQ2h4SzVWc1ZVaXBtVXVmQk1sM2RDZlhva3lsbjZ5OFZEQnZ1RXVKM09I?= =?utf-8?B?bG4rVklGQ2ZGS3cxdi9YMkg2MlVBTjM5UFVyRFJtMXUxbnphOXRBRGR5M3hn?= =?utf-8?B?d0tHSW95aUJaRWpOTEhXUmVQQmdLcFVpdFZtaFh1Y2Z6M2hNb3BpKzJMakMv?= =?utf-8?B?UkZVL0M5SVpBRDlLZEk5a2hBTDJhdThVUmdmUFVjaGJhL3ZMMzhERVpxQWI2?= =?utf-8?B?OFhSNHdac21YL013d2VyNyt4ditwTzhSQkUveXNxVkhsNXBTOGZSSitKa2Iv?= =?utf-8?B?eVFsQTZiUVNCazA5ZHJHZHhaZko0ejFpaDhWdFNtc2ZtUVhhMWkvaTVub0dP?= =?utf-8?B?Y3kxNHkvdWJrL29qcHdDVndDbC84aS8vTHY3dmIzNjZnMUFCclNFYUx2Mzk4?= =?utf-8?B?RllSOXdEWmcxQnVpTGtSa0RTOWdEU2p5VVNianFOSVJxWkNFNHhFMDVzOXVM?= =?utf-8?B?V2toakRxZ3N1UHd2UUxuM0VrdXlNOGlITkNRWVdiVXVULzBXamNJb2E3Q2Vt?= =?utf-8?B?NjNtRTAvSFZvdEFiU0oxcWFvbHBLa25YMnJTUDJ1WjFUbXpYUWpuRHdFTXVD?= =?utf-8?B?dWJSRmM5YnBNSGwyWU9LdlBaN0tHUGQvNXdXVnk4aG9XWWlzUXc4c3ZTSzlE?= =?utf-8?B?U1ZYWjFrWENhTDA4R3NUbkpLb0FiL1M0WmV0Mk1EeUhSZHd3ZW1JWUowYzlG?= =?utf-8?B?ZitvdmN3YktkMkdVNGt1cEx1NCtTWi9Mc2c2Q2dRdlU0VGdZdWJmV0xwME9i?= =?utf-8?B?bFNCZ1I0enhWS041eHdHbFhWanBDaWx3N2VMZzZkN1pBUnBLM0dNSHozR09p?= =?utf-8?B?cTJFZWoxemc4SEdOZDlCTjZpeElmVE9ISmhDR21kMlM1c2NLYktqN00rVWhi?= =?utf-8?B?Ly8vMTV0djFnZzVMZ1hHTHJvdHJEM0FYRzlTOU0rdHd1TUZ5VTc4QnZtZkVx?= =?utf-8?B?MWlENDlnQkJsUE54ME1pQ3Y0WkpUZE8vQ3liZGxBU01oUmRBbXFvMGpQTGtj?= =?utf-8?B?Ymx3MWFRQjhRSURCMnQxank5OGYvWXJLQkFyQTdGQUlCSXBGalZQSWt5M3R0?= =?utf-8?B?bVFIbEhHbDZrcU9XRjJQNjh6MVBCLy9LZWFZVDJzbElKNEZWdjllUkh0K1dL?= =?utf-8?B?aGNzb3ZoY0xvb2tzV3VQSjdXeFY1U01mTFh3aFhiM1Z2QUtOb0tWTmtmZjFw?= =?utf-8?Q?kkw5YVBrxIwSChHZnB/KQWk4c4gyaXLNUKc/X5V97w9s0?= X-MS-Exchange-AntiSpam-MessageData-1: LnFxb2FLxqQitQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 880306ee-8fff-4c40-8229-08de9a1ca4cc X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:54:54.9130 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R8zuKRRkLAaOcY811Bh6tdpmxsdY+rt9bGwCSxGlPSZWMMcxa0heKhQCD1pcL3y3Z9LV6i6oMXZrX0c3qwC2sg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5636 `FwSecBiosBuilder` now only contains `falcon_ucode_offset` which just gets passed directly into `FwSecBiosImage`. Remove `FwSecBiosBuilder` and construct `FwSecBiosImage` directly, as a simplification. Signed-off-by: Eliot Courtney Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 98 +++++++++++++++++---------------------= ---- 1 file changed, 39 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index d71ff5de794f..5cc251c73800 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -233,8 +233,8 @@ impl Vbios { pub(crate) fn new(dev: &device::Device, bar0: &Bar0) -> Result { // Images to extract from iteration let mut pci_at_image: Option =3D None; - let mut first_fwsec_image: Option =3D None; - let mut second_fwsec_image: Option =3D None; + let mut first_fwsec_image: Option =3D None; + let mut second_fwsec_image: Option =3D None; =20 // Parse all VBIOS images in the ROM for image_result in VbiosIterator::new(dev, bar0)? { @@ -254,14 +254,10 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { pci_at_image =3D Some(PciAtBiosImage::try_from(image)?= ); } Ok(BiosImageType::FwSec) =3D> { - let fwsec =3D FwSecBiosBuilder { - base: image, - falcon_ucode_offset: None, - }; if first_fwsec_image.is_none() { - first_fwsec_image =3D Some(fwsec); + first_fwsec_image =3D Some(image); } else { - second_fwsec_image =3D Some(fwsec); + second_fwsec_image =3D Some(image); } } _ =3D> { @@ -271,15 +267,23 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { } =20 // Using all the images, setup the falcon data pointer in Fwsec. - if let (Some(mut second), Some(first), Some(pci_at)) =3D + if let (Some(second), Some(first), Some(pci_at)) =3D (second_fwsec_image, first_fwsec_image, pci_at_image) { - second - .setup_falcon_data(&pci_at, &first) + let fwsec_image =3D FwSecBiosImage::new(pci_at, first, second) .inspect_err(|e| dev_err!(dev, "Falcon data setup failed: = {:?}\n", e))?; - Ok(Vbios { - fwsec_image: second.build()?, - }) + + if cfg!(debug_assertions) { + // Print the desc header for debugging + let desc =3D fwsec_image.header()?; + dev_dbg!( + fwsec_image.base.dev, + "PmuLookupTableEntry desc: {:#?}\n", + desc + ); + } + + Ok(Vbios { fwsec_image }) } else { dev_err!( dev, @@ -621,18 +625,6 @@ struct NbsiBiosImage { // NBSI-specific fields can be added here in the future. } =20 -struct FwSecBiosBuilder { - base: BiosImage, - /// These are temporary fields that are used during the construction o= f the - /// [`FwSecBiosBuilder`]. - /// - /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new - /// [`FwSecBiosImage`]. - /// - /// The offset of the Falcon ucode. - falcon_ucode_offset: Option, -} - /// The [`FwSecBiosImage`] structure contains the PMU table and the Falcon= Ucode. /// /// The PMU table contains voltage/frequency tables as well as a pointer t= o the Falcon Ucode. @@ -898,33 +890,34 @@ fn find_entry_by_type(&self, entry_type: u8) -> Resul= t { } } =20 -impl FwSecBiosBuilder { - fn setup_falcon_data( - &mut self, - pci_at_image: &PciAtBiosImage, - first_fwsec: &FwSecBiosBuilder, - ) -> Result { +impl FwSecBiosImage { + /// Build the final `FwSecBiosImage` from the PCI-AT and FWSEC BIOS im= ages + fn new( + pci_at_image: PciAtBiosImage, + first_fwsec: BiosImage, + second_fwsec: BiosImage, + ) -> Result { let offset =3D pci_at_image.falcon_data_offset()?; =20 // The offset is from the start of the first FwSec image, but it // may point into the second FwSec image. Treat the two FwSec imag= es // as contiguous here and subtract the first image length when the // target lies in the second one. - let pmu_lookup_data =3D if offset < first_fwsec.base.data.len() { - first_fwsec.base.data.get(offset..) + let pmu_lookup_data =3D if offset < first_fwsec.data.len() { + first_fwsec.data.get(offset..) } else { - self.base.data.get(offset - first_fwsec.base.data.len()..) + second_fwsec.data.get(offset - first_fwsec.data.len()..) }; =20 let pmu_lookup_table =3D pmu_lookup_data .ok_or(EINVAL) - .and_then(|data| PmuLookupTable::new(&self.base.dev, data))?; + .and_then(|data| PmuLookupTable::new(&second_fwsec.dev, data))= ?; =20 let entry =3D pmu_lookup_table .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) .inspect_err(|e| { dev_err!( - self.base.dev, + second_fwsec.dev, "PmuLookupTableEntry not found, error: {:?}\n", e ); @@ -932,34 +925,21 @@ fn setup_falcon_data( =20 let falcon_ucode_offset =3D 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())) + .and_then(|o| o.checked_sub(first_fwsec.data.len())) .ok_or(EINVAL) .inspect_err(|_| { - dev_err!(self.base.dev, "Falcon Ucode offset not in second= Fwsec.\n"); + dev_err!( + second_fwsec.dev, + "Falcon Ucode offset not in second Fwsec.\n" + ); })?; =20 - self.falcon_ucode_offset =3D Some(falcon_ucode_offset); - Ok(()) + Ok(FwSecBiosImage { + base: second_fwsec, + falcon_ucode_offset, + }) } =20 - /// Build the final FwSecBiosImage from this builder - fn build(self) -> Result { - let ret =3D FwSecBiosImage { - base: self.base, - falcon_ucode_offset: self.falcon_ucode_offset.ok_or(EINVAL)?, - }; - - if cfg!(debug_assertions) { - // Print the desc header for debugging - let desc =3D ret.header()?; - dev_dbg!(ret.base.dev, "PmuLookupTableEntry desc: {:#?}\n", de= sc); - } - - Ok(ret) - } -} - -impl FwSecBiosImage { /// Get the FwSec header ([`FalconUCodeDesc`]). pub(crate) fn header(&self) -> Result { let data =3D self --=20 2.53.0 From nobody Mon Jun 15 23:15:15 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012000.outbound.protection.outlook.com [40.93.195.0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B22873E63BE; Tue, 14 Apr 2026 11:55:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167706; cv=fail; b=TCi3aQ6KsdM77P0gC2c5FskiLjUp4vnZqXzULkrCMq9GH/qQV/IBiEQUYAu9LWBIilyKgePM8D1ExFs/d1/SeYZo8d1Ga0bNXMYJ+dT4Q1a0m26y0b3NH/1Gnym0H2Cvyb4iYyeSL6NmtZZFA7YPXWp1Onwd6c9Uh6uZX8RYsAY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776167706; c=relaxed/simple; bh=vxjuR0/4mdbX6jwot13KrbAriAJGdzMaWcYMYrYXV+o=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=cWgYgMj2zwBL1gPQYTBqHvv2OOex8W/Ic5QaD3LTODt5AEozx0a2su7DVBknhwKwLXbCngQfp7fbM5mCKReYeuNdqU0yXwnHgY4vFKeRnmF39zUEtSDanvyJ7TsvEFun+sU89ot23e62OXW4LGrHK/gcKQRRPmn5b8bm/7G0Ivg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=aStJKqvA; arc=fail smtp.client-ip=40.93.195.0 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="aStJKqvA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=na5i/bGBbYDzMRrdHYCieDINsomg3y1e34dF7bPMcKOs4xO5mjKaMi+wuQEfs8TBEOZ2wkOUvfR3bFGW460iq4+oN19g/FlisP+LLCDXoXnaKBOnX/Dg11sBTU+vxXe81Ir6fBWfbrA17ttakx7Ytu7oxerKZdCDIkWuyoRdaThJ+HVf27SLunZB4T6jmR4n99JlS15pfTZgdJ8DwhRy72QiOSWUWgx2b2gwFHsWaQFx03Y5NJIIUPMoK4OE2a/S6zdOaO+Oxihccg74nIuizl+GRlUsjCO5/EBF0DUbKHusialyCMT0FANizPZ3Sh5q3+sU3uPJu7wYnfwz/8kgUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fFX5aT0TtBGvw0UctHAvSk5kl90yZs43duVvZjoSx5o=; b=WR7cgUb4kkid7YIBQ7r8zImCosK+naPSd+Vj3t6ZDwSnRAuyM/qF2qumLcst+WEeMKZGWI5Tyi3LhvhDyu8q/C8/hwSuiyLS7XKpYILfnbmczlwOS5jI0J1jh41+eiFaejNczALQesFWHHP3dJrWWHjxrq8ieCVmfAL6C3Ukdu4vIZ9ZwlUNOruQdlxDHibR8iyzqjHsRqPmwzYxpskK9iAe6F7lHC1/rkhGyN+N6o3N+E0JSDR8D9rpgqsBhBs09520LaIiwasCqArRrFluNp+6bC3B3VAuW2lXvSS/89SBfEfrtN0RS34oYibzcpebDu35O6jBj+Cs+CsBxSXrew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fFX5aT0TtBGvw0UctHAvSk5kl90yZs43duVvZjoSx5o=; b=aStJKqvAT3p+Qlbn56AfjxO53qxiMtQgzQ7X6RBVwJXD7DQ6ky0ADd6Pq8J3TYta4sGj6NF5UgxRWtlxA8Y0oeOk8ulXtgTXgYMoZv9R9BIf+OyIFszPxtPeskf6Jq0xKs/1gEQb2142RDYozan3Dm9pU8ayKNl4jR+Jo36WP5Rk0WYjW8DgHO+fiWfWlFd8xJwkUB0N+d2Bjui7+bQov/9eggkZscWyDi/aA8dTkGlDUZ8clrxAuQrntb7caWmOx//3/GV5W67LMGKihIidYHlKJlhCrGQOsLcfu52XXm85Qj4bRJgeQzg1+hFIxXPzD8ezXUQwI3n8sCuiEznunQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by LV2PR12MB6013.namprd12.prod.outlook.com (2603:10b6:408:171::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9791.34; Tue, 14 Apr 2026 11:55:00 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026 11:55:00 +0000 From: Eliot Courtney Date: Tue, 14 Apr 2026 20:54:14 +0900 Subject: [PATCH v2 11/11] gpu: nova-core: vbios: reject extra PCI-AT and FWSEC images Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-fix-vbios-v2-11-705d30d16bba@nvidia.com> References: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> In-Reply-To: <20260414-fix-vbios-v2-0-705d30d16bba@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Joel Fernandes Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.1 X-ClientProxiedBy: TY4P286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b2::8) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|LV2PR12MB6013:EE_ X-MS-Office365-Filtering-Correlation-Id: b42a1184-49bc-4e1d-824c-08de9a1ca7e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|10070799003|1800799024|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: yPohLTOYI4/uUewynA3k6OEAWyRFLhR8T8UwQ+JZPFZt0dmbfBukay3xQaLA/TITSRKTQn1TVIw6yclCRhHKjhdqU+jXSQw/gvQVOcB+MyDOw+uryjDJWf/k8ES0xa7vkaoxS1BdkcAs8xdLk+d8aXdEPjCKENo7RLs2h+ZwFuTrKIW5DuOTeyB8HCOkA0yD8PGIlP3Gwf+hm1ArsIfqADZ3QyAg5fDR9nL0f610lgHsNDPrlvCDcJWeI8l5M354UutN/sT8vCNWUM2KXxEjYHaWVEoxMK5bFLrD13ZUE9i4EXw9DuyHo+Uba4YFaGiwvv0Vfy2XAnjrmM8CVol9i2elr+FM3G9cKhYuChn6vZrfUJKXslbjmrHtVK99EYeeW3xe410Td1dT5hn0YsjRJNW3sHukILCakL4mFgnKZVYqxq0tN+XcCVdNpGDsgaH8iNzxIlJSEry4clKYX5OpqouutFTxpgcOlROg4zSb7NN8e2rjp+++FwkC+y2EdXotMdR1om4rdaH585T4bK9vq9mMtR07oNsofXY4G4SlMJSqT2X2Ol6gl5PwmDFuishFHGhCLJFOGNc4Z3lvytgDIJFjkqZH8cnmQHrRVtRKzhg2iJ1MrQtTebitjmtW0QUlKAS1jBakmO9HkoqlhVPtCBYIONmr6HyFzJFR6w2PQR1BMognwG31nCOL74moq2oNM2QvxRO6eD0l0QhLVvoigeP6ZCs0fj2QhVp1gEYP96M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(10070799003)(1800799024)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckhVUnVFWE1sZzk5czZhOUNkSUVMR3Z1MlF3aEtmNnBIbW9XTWMyMXZucGo3?= =?utf-8?B?V1BiRkVRdFdaVFNsYVhodnhrcC81S3pheVBWVFhCeW95NTI5Q2NzcnovTllB?= =?utf-8?B?UUhyRk9NemdxL2V5N0lRMWhYQjZpazJ1R282cjJZQUMzeElieHc1Y2Z5U2hp?= =?utf-8?B?NzhyTFVpOGRRcWVaK3hGanJ5SmJVaTFiMWtreUExZG5Gd0R4ZnpNQXo4RlRT?= =?utf-8?B?WldYZXpEMHQ3dS91UTlPdVI0RFlRc2tNVmZ0Q0Y0bTJUb0g5cnNqT3VQeERv?= =?utf-8?B?dUQrSTRZQmxRcUp4MU14MHhFVk15RUZQMDFpRmROM2h4ZnV2RmpQKzBjekJP?= =?utf-8?B?RnpGYTFRQ0k5OXdXQnBKeGtwdE5zNTM2YWk5bUd6Skh0NDFDckhGbGFDSWNI?= =?utf-8?B?VnJhS1NTNVB3UlZjTnF2ZkRMRSt4Tk1GMkd3cytUd0ttY25abXNMN3ROVFZa?= =?utf-8?B?Z2U5QkdjbGxmbTM5M0lxaEVQK1NBd3h6ZE9ieWE1TEZ3RE5oeDVjajlVQzM2?= =?utf-8?B?akpSOURNcEpYWWdKTkF4Q0VBeDA5cjhVc2pRendIS0NDQnczNFR2RXlzeHV2?= =?utf-8?B?NGpRQUY5RENUVm0vc1JXSmpYT0d6UmhjclZocSt4UmJYZ0NQS1BBUzdGUmF3?= =?utf-8?B?UXNzVk1sY1NPQ3kvZkt5WmhHTmwyWGVGb1cydlEva2srbmlrMXdEU1E4ckJD?= =?utf-8?B?em51S1dNMFRoZWgzVWdDU1lKT010aHM5cHNnUkg5bldXNXB0cUlOUURya2Z5?= =?utf-8?B?OUpPUWM5VUlqWlZqOGNLY1JMRXhkUUpvbWh3WGEzL0VTeGlRa3I4NjRxS0ZF?= =?utf-8?B?VlpQSSttSWlvcEwzMzB1ZmFBeHZWQUgzeFdVWFkvVFhzUGxoODFUTE5UM0Vh?= =?utf-8?B?RnFqSlRTUjh2Y1lsclpMelgyMktTalNnN1RQcCtDRGVUZ3piSUhMdXp2OXhu?= =?utf-8?B?S2wzcWl2MmR0bFdlZjlOS0RrbW9YSDlpNGxPbEJEaFd6bkEzaHQvcTRzY09v?= =?utf-8?B?TmpqcjZqWU5NenE5alVQM2hNTHpqM3EyZmwrZ1NvNFNLZmVaVXZ6ZGtkbzQ2?= =?utf-8?B?L01SQmQzbmthQkI4Wm53WDFmTjBOUEMyNS96SWx2UXJoMndCcWVUTXNYaDNo?= =?utf-8?B?T0Exdk9DWWlXYVJxWGlKeUJia0ltU2lGSTRWRElCdTZ0L1o2QmdzbTk1QlNH?= =?utf-8?B?clRmb2ozYmg2dVlhL2dMYWNIZXdJeEJxRzZYb2FnZlJKcExGNVJsVnlBTHMy?= =?utf-8?B?TFY0OFhmMFFCek5HbnlSdFB5aXdmY2ZIb1FxL3BKZzV1WHY0NWVRZzZoOCs1?= =?utf-8?B?V3VuYVpkb0NTcFIyb0xlRmp4b3lYWTRZMEw2ZnhZbkwwNjlsM2NaZVFhaHBt?= =?utf-8?B?Mkx0UEFWRmtsRStZL3F5VjZoVnlNOFRDRHRNQ0RmUVM4S3BUYWNCNXRiSzFZ?= =?utf-8?B?QkpTMmpZNXVBQndSV29YVjRlcHZnR3RnNVIzUGdPMnhNZVBDanlmUUJZa2lW?= =?utf-8?B?RElza3hMNTg2WUVCUHdnWWFRZC8vQTZpWkdzcW5LUEpsOExzTzBkdU52T2NH?= =?utf-8?B?RGJObWJKaHlYdkUxRGNKWUVxYmdnanM1UDB3ZjBNRTlxWUIvbkNySHVoa1BM?= =?utf-8?B?YkxMcXBPa2xNdVkzdnI5YXdDUkRkei9BZXlGM0x2MlFXV3pkWWJ5VkM1Tndz?= =?utf-8?B?Q21iN0FQSzNuOEdzWCt4RWtxV3YrZkVCRXZvS3E4M3dNVTlyeWJVUTk2V29Q?= =?utf-8?B?OGVzN01ZOG1TWGREcTRNYWV2SEx2bDVSeEltZ0hubGVtUVllSVFaUE4vWkxi?= =?utf-8?B?ZFVXbk10dnZZZUh4YTJHbDhSdU5zeFBZVld4MUtobGFzZXd5aVFXSm4vUFBZ?= =?utf-8?B?WVZVaExaZHRBQUpoVkZtMUtGUGtoUFNIaE1Td0h0MS9qR2pPL0pJaFdSOU12?= =?utf-8?B?cEdXd0psRTNxZWtKd1VveU1waGwrN2ZvbkU4VlE3djdHY3JKQ2hkZUlqRjFT?= =?utf-8?B?SCtuZWdNdUtUSU5ka0JuM2tNbHNMR0VocXZvWHI2NWFsbVJZcEIrM3hrUDlU?= =?utf-8?B?WWFGUjBDQS9BS3ZLNHYyZ0lETTN4Skt6alJvUHdLajJZajFsZTZoZU9HK04r?= =?utf-8?B?MjVKVjgzRTZNbUJOTUdGSzVjWFM0eFpXeEdkcmFFbUIwVGh1V1VHYkM0eC9N?= =?utf-8?B?RXg4ckcvcHErdHlVRFhxUUViSmY0NW01VlpveTZLYUNWOFJMZTI3ejE3VlVR?= =?utf-8?B?SnIrd2swSVl5K3gyNzdjSjg0YkVEdnFLVkJQbmdpOTZHYXFsRE9XOTdSNi95?= =?utf-8?B?cTRzNXZocDlrSGdEVDF4RDduWUtXNXBnalpXdVB0K3BINUpoN3BlLy96OXl3?= =?utf-8?Q?OL0/lqAB5bI2xqb2csOThm3Eh/o/+Brlr8NrupkPWlmYq?= X-MS-Exchange-AntiSpam-MessageData-1: wPLt8gAc1HDGzQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b42a1184-49bc-4e1d-824c-08de9a1ca7e3 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 11:55:00.2170 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZrO7C+OgcEa2qXrzzZ3ThOwWqInKysX8PYQi1lK6QqRfuMDSAGBh6N7JQ18fipIsAivox1a/LPItWGLCjKcPww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB6013 Currently, these are silently overwritten. Instead, error if they appear twice in the VBIOS. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/vbios.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 5cc251c73800..a9294b68ea77 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -251,13 +251,20 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { // Convert to a specific image type match BiosImageType::try_from(image.pcir.code_type) { Ok(BiosImageType::PciAt) =3D> { + if pci_at_image.is_some() { + dev_err!(dev, "More than 1 PCI-AT image found\n"); + return Err(EINVAL); + } pci_at_image =3D Some(PciAtBiosImage::try_from(image)?= ); } Ok(BiosImageType::FwSec) =3D> { if first_fwsec_image.is_none() { first_fwsec_image =3D Some(image); - } else { + } else if second_fwsec_image.is_none() { second_fwsec_image =3D Some(image); + } else { + dev_err!(dev, "More than 2 FwSec images found\n"); + return Err(EINVAL); } } _ =3D> { --=20 2.53.0