From nobody Tue Mar 11 14:04:42 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZBwVy5Slfz5qbnb; Tue, 11 Mar 2025 14:04:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZBwVy3YQBz3qlb; Tue, 11 Mar 2025 14:04:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741701882; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=29+5Wp3iYu/mCvuLISoNCqT22UMJPk5JoNziU65ku6s=; b=lQnN7VWSviiaLeLdCVUidcCJo4XoYVMucW6o3NBLTFa5OUYfGOabPd8Ivn893f7xHvaH4f VAXiM+p+wIOu8m4Db+xlo45l32XcQt0iHSarxOX4bfqUzIqKY5EAwf3TEkq6ulBLQN0G18 7oRDmiA3yd/vzTyKMKOfE3ZuH1p5Jny9SA3AVTj6mpE+wJ393fwObYPvEuFhvZ5yR6TkcT pEvhgzNnT5ftRqU6hBzhf70Lwmlu2R1P4PCbmgAXY6DzvwpD+DZJxyfEpDimA2MHZkbycQ tKONe6WxnhbVrqHMOS/FQBREzI8FfF0TtoX4hFVbbxR06uR4C1HABoZJckwqWQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741701882; a=rsa-sha256; cv=none; b=AAIVlldNzC3brc1g3B/7N3J8YYbV/3V/c915Fwy8vsDxxmySxpQJh6znG2jZvz0HmBqIFI gYzn++HSwC5rBhRy2GPljGSxs5DWpt8elfy3Kh+xy1xKzY6JTHFCI1lUX7VcK/sZkPHjB5 hcFuSsAt1JZsseRQ9W9r2z89BFejJxT+ze5Zyud/KRDOipzmyV4j9p8OCoVGKytui4rUR7 i26ClxS5tDyVlD2ck03CybWBOFDNStE9aBxM4zcPJzSGR1LWjUzKCPDyy3IG7ynbTJYBor mJPnV41HNx7p8Tolj/1/qt9J0aNioBgyeuY+7FI4OebmXOmF1coEPIn/OdS7Pw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741701882; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=29+5Wp3iYu/mCvuLISoNCqT22UMJPk5JoNziU65ku6s=; b=Bep8Yn5FazTHiuu4fwIb/ajH4MliHS0kIFnO5iz0S6uKoo9rXvhEgrlMABV029kjO63c9Z b6l+TNIRuteG3fY4FoXGfVk2WlzQ+C7LuP6pV6dELHjsE4kGlJC7HyvZsGxvEGu0PWw1lQ zWvNlN5pAo0x1K/E36KYUY70WGsa++ra0zsOz77teQDzr+bsJfqp96+X/fwaB3XByJy4SE M+oEU/JT+wMNh01WoW7VW2TarNa/y1W8AKFYzWmj2CzIxEUPlwFak0IguDTqZw3kHHruvk xG+60LD/SyRDpAOUhgVbMzE5eo6NXYcajl7+yYBhE5pvExkQFy2bUK7Df+myrw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZBwVy26CqzDBf; Tue, 11 Mar 2025 14:04:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 52BE4gcY028764; Tue, 11 Mar 2025 14:04:42 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52BE4gYQ028761; Tue, 11 Mar 2025 14:04:42 GMT (envelope-from git) Date: Tue, 11 Mar 2025 14:04:42 GMT Message-Id: <202503111404.52BE4gYQ028761@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 7e61fc76400c - main - libsa: smbios: Stop parsing on an End-of-Table structure List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7e61fc76400cce08de39adde99b879f0bca21b7d Auto-Submitted: auto-generated The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=7e61fc76400cce08de39adde99b879f0bca21b7d commit 7e61fc76400cce08de39adde99b879f0bca21b7d Author: Olivier Certner AuthorDate: 2025-03-04 11:17:45 +0000 Commit: Olivier Certner CommitDate: 2025-03-11 13:54:09 +0000 libsa: smbios: Stop parsing on an End-of-Table structure This structure exists since SMBIOS v2.2 and indicates that there are no structures to be parsed beyond this point. For backwards compatibility, the standard recommends that system software ensures that this structure covers the rest of the SMBIOS structure table area as reported by the Structure Table Address, and the Structure Table Maximum Size (64-bit entry point) or the Structure Table Length (32-bit entry point), which makes existing parsers continue to work correctly as they usually ignore unknown structure types. However, this is not a requirement, so be bullet proof and immediately stop parsing in this case. Reviewed by: imp, markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49285 --- stand/libsa/smbios.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/stand/libsa/smbios.c b/stand/libsa/smbios.c index e726dfeb7af3..50cab3eee939 100644 --- a/stand/libsa/smbios.c +++ b/stand/libsa/smbios.c @@ -92,6 +92,7 @@ #define SMBIOS_SIG "_SM_" #define SMBIOS3_SIG "_SM3_" #define SMBIOS_DMI_SIG "_DMI_" +#define SMBIOS_EOT_TYPE 0x7f /* * 5.1 General @@ -504,6 +505,9 @@ smbios_parse_table(const caddr_t addr) (size & 0x7fff) : (size << 10); break; + case SMBIOS_EOT_TYPE: /* 3.3.42 End-of-Table (Type 127) */ + return (NULL); + default: /* skip other types */ break; } @@ -529,15 +533,19 @@ smbios_find_struct(int type) ep = smbios.addr + smbios.length; for (dmi = smbios.addr, i = 0; dmi < ep && i < smbios.count; i++) { - if (SMBIOS_GET8(dmi, 0) == type) { - return dmi; - } + const uint8_t seen_type = SMBIOS_GET8(dmi, 0); + + if (seen_type == type) + return (dmi); + if (seen_type == SMBIOS_EOT_TYPE) + /* End of table. */ + break; /* Find structure terminator. */ dmi = SMBIOS_GETSTR(dmi); - while (SMBIOS_GET16(dmi, 0) != 0 && dmi < ep) { + while (SMBIOS_GET16(dmi, 0) != 0 && dmi < ep) dmi++; - } - dmi += 2; /* For checksum */ + /* Skip it. */ + dmi += 2; } return (NULL); @@ -632,8 +640,8 @@ smbios_detect(const caddr_t addr) if (smbios.addr == NULL) return; - for (dmi = smbios.addr, i = 0; - dmi < smbios.addr + smbios.length && i < smbios.count; i++) + for (dmi = smbios.addr, i = 0; dmi != NULL && + dmi < smbios.addr + smbios.length && i < smbios.count; i++) dmi = smbios_parse_table(dmi); setenv("smbios.entry_point_type",