From nobody Tue Apr 08 13:41:05 2025 X-Original-To: dev-commits-src-branches@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 4ZX6fp56jnz5sQB1; Tue, 08 Apr 2025 13:41:06 +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 4ZX6fn6JJ5z3DMF; Tue, 08 Apr 2025 13:41:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744119665; 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=l9YaPAlFSOGpLrDG7D+fU6apnh4UTIei1Iuc0uehm5k=; b=gH143fz4ZB24+gB9YrgjZPAIQPZITOy0r/yLUS/0vOg/hHNJeARRsx/yh762OiHB5e7GPN STPXXZWC+OY5H2VRD61hADrKzLeFcdJJUYRwLQueAf4FBRA/FRg4n0KFOBVeVc3neS4kDd KRnT/ZWXJfx9OwxdPZ/ta7bWVras1lfJ0yb4uO3nGFg63QJnfTxb2qvaLi3Lkin4E2k7xz 5TlHslyLiSk6gC0JPX5KliOORZ0P2SEY0xgiTUFa334IA7DXRR2DtMPv3CTXdhTYixLpao msyHSaJtOC6BTfa0mh/2oUwEZk9Wmyugvw6Z8hK6hC0RAive6uXKTaHMZ/D1RQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1744119665; a=rsa-sha256; cv=none; b=O5Mk5QH8X2U0VLrSEU6pUKcONlzOuSJy6hhSNt1choyVcLOGwVmD8WUn+VlnuWzBuF861Q NLTzY3Ae0DIj+fqsjkj2l+0H9JlwgOzbdpn+m0NJgDenrZiTcFOgVeFKeQJiY3Far1EvZn OaQ411Q2lHDvKxWVqo12ioyTzqI4cQADrXM493RMyIiOrr0qp3QnDm8G5iNBqO0pzgmsrS H2j7L+rWKEMXB/oiOhy0NBJuG8V6/1Rz1tJLU1nzVJQs0b+OxvcudUNJTdnTzRo8LcbOC/ YV81nkptzty1JnG0PilgqwgY53xBDy8b+fiqm8QvL1nrCUDcb/TM1mBprsLAFg== 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=1744119665; 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=l9YaPAlFSOGpLrDG7D+fU6apnh4UTIei1Iuc0uehm5k=; b=WsYjJmXg3s7adgJmSxSs8zuVAqbWjqoP+BExuHMD/oPStxjE5CWTFnxPnyjAMgUb5rWnr7 /BHGrKX9XQWd7WYW5KrSP+idtmk6ihFpOCNod/xz1DE0n/GV1LHg/7xfG6S6IYWhpua6Vi BtJcITjDYWT5X16atjtDrKFNQ1SF2pSK73uwEElSwnPqw/dr3f+2cCkRud/Mco4kKvKeTc pz1i7WI3ggyiCChMvO6Tl0EsDxyWAERg/CVFzOoHkQobD1zSYJWAyKfRVwGdgYhUHQA9hP REGvM78sp2gL/P+3Co6lrDz/9sRzzKjy+QnP+HxJPPhYYZYcO2cZtwx+3fQRlg== 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 4ZX6fn5N4YzbJf; Tue, 08 Apr 2025 13:41:05 +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 538Df51M032535; Tue, 8 Apr 2025 13:41:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 538Df5ef032532; Tue, 8 Apr 2025 13:41:05 GMT (envelope-from git) Date: Tue, 8 Apr 2025 13:41:05 GMT Message-Id: <202504081341.538Df5ef032532@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Olivier Certner Subject: git: 330f1a42813e - stable/14 - libsa: smbios: Stop parsing on an End-of-Table structure List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/14 X-Git-Reftype: branch X-Git-Commit: 330f1a42813e70186bdbef6ff22f24c61d36a24a Auto-Submitted: auto-generated The branch stable/14 has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=330f1a42813e70186bdbef6ff22f24c61d36a24a commit 330f1a42813e70186bdbef6ff22f24c61d36a24a Author: Olivier Certner AuthorDate: 2025-03-04 11:17:45 +0000 Commit: Olivier Certner CommitDate: 2025-04-08 13:38:27 +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 (cherry picked from commit 7e61fc76400cce08de39adde99b879f0bca21b7d) --- 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",