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