git: ead6f1476713 - main - Revert "sysutils/cpu-microcode-intel: Handle extended signature tables"

Joseph Mingrone <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <6a7bef44.3bae8.46d4c022__2722.77091150812$1786507156$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by jrm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=ead6f1476713d51fd85ffae50645786b782f2d07

commit ead6f1476713d51fd85ffae50645786b782f2d07
Author:     Joseph Mingrone <[email protected]>
AuthorDate: 2026-08-11 17:25:21 +0000
Commit:     Joseph Mingrone <[email protected]>
CommitDate: 2026-08-12 03:57:28 +0000

    Revert "sysutils/cpu-microcode-intel: Handle extended signature tables"
    
    This reverts a change to the way Intel CPU microcode files were split.
    In d4b93e8846, an explicitly named file was written for each
    signature+platform combination in an image's extended signature table.
    Writing these new files offered discoverability advantages, but it was
    unnecessary since cpucontrol(8) already checks the embedded extended
    signature table.  Moreover, adding these extra files increased the size
    of the split files by about 50% when the default SPLIT knob was enabled.
    
    This reverts commit d4b93e88468975e64d6321cfc463f5fc19f46d35.
    
    PR:             295351
    Sponsored by:   The FreeBSD Foundation
---
 sysutils/cpu-microcode-intel/Makefile            |   2 +-
 sysutils/cpu-microcode-intel/files/ucode-split.c | 132 +++++------------------
 sysutils/cpu-microcode-intel/pkg-plist           |  22 ----
 3 files changed, 27 insertions(+), 129 deletions(-)

diff --git a/sysutils/cpu-microcode-intel/Makefile b/sysutils/cpu-microcode-intel/Makefile
index 876f6ca40a1e..d55653f257b5 100644
--- a/sysutils/cpu-microcode-intel/Makefile
+++ b/sysutils/cpu-microcode-intel/Makefile
@@ -1,7 +1,7 @@
 PORTNAME=	microcode
 DISTVERSIONPREFIX=	microcode-
 DISTVERSION=	20260512
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	sysutils
 PKGNAMEPREFIX=	cpu-
 PKGNAMESUFFIX=	-intel
diff --git a/sysutils/cpu-microcode-intel/files/ucode-split.c b/sysutils/cpu-microcode-intel/files/ucode-split.c
index a25835b8d43e..be659a613902 100644
--- a/sysutils/cpu-microcode-intel/files/ucode-split.c
+++ b/sysutils/cpu-microcode-intel/files/ucode-split.c
@@ -50,19 +50,6 @@ struct microcode_update_header {
 	uint32_t reserved[3];
 };
 
-/* SDM (March 2026) vol 3A 12.11.2 Optional Extended Signature Table. */
-struct ucode_intel_extsig_table {
-	uint32_t signature_count;
-	uint32_t checksum;
-	uint32_t reserved[3];
-};
-
-struct ucode_intel_extsig {
-	uint32_t processor_signature;
-	uint32_t processor_flags;
-	uint32_t checksum;
-};
-
 /*
  * SDM vol 2A CPUID EAX = 01h Returns Model, Family, Stepping Information.
  * Caller must free the returned string.
@@ -119,38 +106,6 @@ dump_header(const struct microcode_update_header *hdr)
 	free(sig_str);
 }
 
-static void
-copy_entry(int ifd, off_t entry_start, uint32_t total_size,
-    const char *output_file, char *buf, bool vflag)
-{
-	off_t off;
-	size_t len, resid;
-	ssize_t rv;
-	int ofd;
-
-	ofd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
-	if (ofd < 0)
-		err(1, "open");
-
-	resid = total_size;
-	off = entry_start;
-	while (resid > 0) {
-		len = resid < bufsize ? resid : bufsize;
-		rv = pread(ifd, buf, len, off);
-		if (rv < 0)
-			err(1, "pread");
-		else if (rv < (ssize_t)len)
-			errx(1, "truncated microcode data");
-		if (write(ofd, buf, len) < (ssize_t)len)
-			err(1, "write");
-		resid -= len;
-		off += len;
-	}
-	if (vflag)
-		printf("written to %s\n", output_file);
-	close(ofd);
-}
-
 static void
 usage(void)
 {
@@ -163,13 +118,10 @@ int
 main(int argc, char *argv[])
 {
 	struct microcode_update_header hdr;
-	struct ucode_intel_extsig_table etbl;
-	struct ucode_intel_extsig extsig;
 	char *buf, *output_file, *sig_str;
-	off_t entry_start;
-	uint32_t data_size, total_size, i;
+	size_t len, resid;
 	ssize_t rv;
-	int c, ifd;
+	int c, ifd, ofd;
 	bool vflag;
 
 	vflag = false;
@@ -197,10 +149,6 @@ main(int argc, char *argv[])
 		err(1, "malloc");
 
 	for (;;) {
-		entry_start = lseek(ifd, 0, SEEK_CUR);
-		if (entry_start < 0)
-			err(1, "lseek");
-
 		/* Read header. */
 		rv = read(ifd, &hdr, sizeof(hdr));
 		if (rv < 0) {
@@ -216,68 +164,40 @@ main(int argc, char *argv[])
 		if (vflag)
 			dump_header(&hdr);
 
-		data_size = hdr.data_size != 0 ? hdr.data_size : 2000;
-		total_size = hdr.total_size != 0 ? hdr.total_size : 2048;
-
-		/* Arbitrarily chosen maximum size. */
-		if (total_size - sizeof(hdr) > 1 << 24)
-			errx(1, "header total_size too large");
-
-		/* Write primary output file. */
 		sig_str = format_signature(hdr.processor_signature);
 		asprintf(&output_file, "%s.%02x", sig_str,
 		    hdr.processor_flags & 0xff);
 		free(sig_str);
 		if (output_file == NULL)
 			err(1, "asprintf");
-		copy_entry(ifd, entry_start, total_size, output_file, buf, vflag);
-		free(output_file);
+		ofd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+		if (ofd < 0)
+			err(1, "open");
+
+		/* Write header. */
+		rv = write(ofd, &hdr, sizeof(hdr));
+		if (rv < (ssize_t)sizeof(hdr))
+			err(1, "write");
 
-		/*
-		 * Process the extended signature table, if present.  Each
-		 * entry names an additional processor signature and platform
-		 * flags combination covered by this microcode blob, so write
-		 * a copy of the blob for each.
-		 */
-		if (total_size > data_size + sizeof(hdr)) {
-			if (lseek(ifd, entry_start + sizeof(hdr) + data_size,
-			    SEEK_SET) < 0)
-				err(1, "lseek");
-			rv = read(ifd, &etbl, sizeof(etbl));
+		/* Copy data. */
+		resid = (hdr.total_size != 0 ? hdr.total_size : 2048) -
+		    sizeof(hdr);
+		if (resid > 1 << 24) /* Arbitrary chosen maximum size. */
+			errx(1, "header total_size too large");
+		while (resid > 0) {
+			len = resid < bufsize ? resid : bufsize;
+			rv = read(ifd, buf, len);
 			if (rv < 0)
 				err(1, "read");
-			else if (rv < (ssize_t)sizeof(etbl))
-				errx(1, "truncated extended signature table");
-
-			for (i = 0; i < etbl.signature_count; i++) {
-				rv = read(ifd, &extsig, sizeof(extsig));
-				if (rv < 0)
-					err(1, "read");
-				else if (rv < (ssize_t)sizeof(extsig))
-					errx(1, "truncated extended signature "
-					    "entry %u", i);
-
-				sig_str = format_signature(
-				    extsig.processor_signature);
-				asprintf(&output_file, "%s.%02x", sig_str,
-				    extsig.processor_flags & 0xff);
-				free(sig_str);
-				if (output_file == NULL)
-					err(1, "asprintf");
-
-				copy_entry(ifd, entry_start, total_size,
-				    output_file, buf, vflag);
-				free(output_file);
-			}
+			else if (rv < (ssize_t)len)
+				errx(1, "truncated microcode data");
+			if (write(ofd, buf, len) < (ssize_t)len)
+				err(1, "write");
+			resid -= len;
 		}
-
 		if (vflag)
-			printf("\n");
-
-		/* Advance to the next entry. */
-		if (lseek(ifd, entry_start + total_size, SEEK_SET) < 0)
-			err(1, "lseek");
+			printf("written to %s\n\n", output_file);
+		close(ofd);
+		free(output_file);
 	}
-	free(buf);
-	close(ifd);
 }
diff --git a/sysutils/cpu-microcode-intel/pkg-plist b/sysutils/cpu-microcode-intel/pkg-plist
index 3828ed97c309..fe3b1f13ad6a 100644
--- a/sysutils/cpu-microcode-intel/pkg-plist
+++ b/sysutils/cpu-microcode-intel/pkg-plist
@@ -148,21 +148,12 @@
 %%SPLIT%%%%DATADIR%%/06-8e-0a.c0
 %%SPLIT%%%%DATADIR%%/06-8e-0b.d0
 %%SPLIT%%%%DATADIR%%/06-8e-0c.94
-%%SPLIT%%%%DATADIR%%/06-8f-04.10
-%%SPLIT%%%%DATADIR%%/06-8f-04.87
-%%SPLIT%%%%DATADIR%%/06-8f-05.10
-%%SPLIT%%%%DATADIR%%/06-8f-05.87
-%%SPLIT%%%%DATADIR%%/06-8f-06.10
-%%SPLIT%%%%DATADIR%%/06-8f-06.87
-%%SPLIT%%%%DATADIR%%/06-8f-07.87
 %%SPLIT%%%%DATADIR%%/06-8f-08.10
 %%SPLIT%%%%DATADIR%%/06-8f-08.87
 %%SPLIT%%%%DATADIR%%/06-96-01.01
 %%SPLIT%%%%DATADIR%%/06-97-02.07
-%%SPLIT%%%%DATADIR%%/06-97-05.07
 %%SPLIT%%%%DATADIR%%/06-9a-03.80
 %%SPLIT%%%%DATADIR%%/06-9a-04.40
-%%SPLIT%%%%DATADIR%%/06-9a-04.80
 %%SPLIT%%%%DATADIR%%/06-9c-00.01
 %%SPLIT%%%%DATADIR%%/06-9e-09.2a
 %%SPLIT%%%%DATADIR%%/06-9e-0a.22
@@ -182,24 +173,11 @@
 %%SPLIT%%%%DATADIR%%/06-af-03.01
 %%SPLIT%%%%DATADIR%%/06-b5-00.80
 %%SPLIT%%%%DATADIR%%/06-b7-01.32
-%%SPLIT%%%%DATADIR%%/06-b7-04.32
 %%SPLIT%%%%DATADIR%%/06-ba-02.e0
-%%SPLIT%%%%DATADIR%%/06-ba-03.e0
-%%SPLIT%%%%DATADIR%%/06-ba-08.e0
 %%SPLIT%%%%DATADIR%%/06-bd-01.80
 %%SPLIT%%%%DATADIR%%/06-be-00.19
-%%SPLIT%%%%DATADIR%%/06-bf-02.07
-%%SPLIT%%%%DATADIR%%/06-bf-05.07
-%%SPLIT%%%%DATADIR%%/06-bf-06.07
-%%SPLIT%%%%DATADIR%%/06-bf-07.07
-%%SPLIT%%%%DATADIR%%/06-c5-02.82
 %%SPLIT%%%%DATADIR%%/06-c6-02.82
-%%SPLIT%%%%DATADIR%%/06-c6-04.82
-%%SPLIT%%%%DATADIR%%/06-ca-02.82
 %%SPLIT%%%%DATADIR%%/06-cc-01.90
-%%SPLIT%%%%DATADIR%%/06-cc-02.90
-%%SPLIT%%%%DATADIR%%/06-cc-03.90
-%%SPLIT%%%%DATADIR%%/06-cf-01.87
 %%SPLIT%%%%DATADIR%%/06-cf-02.87
 %%SPLIT%%%%DATADIR%%/0f-00-07.01
 %%SPLIT%%%%DATADIR%%/0f-00-07.02
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.