Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fwts for openSUSE:Factory checked in at 2026-07-21 23:10:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fwts (Old) and /work/SRC/openSUSE:Factory/.fwts.new.24530 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fwts" Tue Jul 21 23:10:14 2026 rev:90 rq:1366865 version:26.07.00 Changes: -------- --- /work/SRC/openSUSE:Factory/fwts/fwts.changes 2026-05-28 17:34:04.677436179 +0200 +++ /work/SRC/openSUSE:Factory/.fwts.new.24530/fwts.changes 2026-07-21 23:10:35.982706304 +0200 @@ -1,0 +2,18 @@ +Tue Jul 21 05:52:40 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 26.07.00: + * Add new klog database entries for x86 E820 table overflow, + ACPI FFH LPI, fan status/extension, RIMT IOMMU lookup, AGDI + interrupt registration and MPAM error messages. + * tpm2: accept Arm FF-A Start Method and validate its parameters. + * tpmevlog: handle PCR[0] replay for EV_EFI_HCRTM_EVENT. + * dmicheck: fix off-by-one in SMBIOS table size boundary check + and fix bus error when copying SMBIOS tables from memory. + * uefibootpath: correct error message for UART stop bits + validation. + * Fix numerous format strings across acpi (fadt, hest, madt, + mcfg, gpedump, tpm2) and tpm event-log dumping. + * acpi: madt: silence compiler warning when using Clang. + * build: link explicitly to zlib. + +------------------------------------------------------------------- Old: ---- fwts-26.05.00.obscpio New: ---- fwts-26.07.00.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fwts.spec ++++++ --- /var/tmp/diff_new_pack.6Jk98h/_old 2026-07-21 23:10:38.894805868 +0200 +++ /var/tmp/diff_new_pack.6Jk98h/_new 2026-07-21 23:10:38.902806141 +0200 @@ -17,7 +17,7 @@ Name: fwts -Version: 26.05.00 +Version: 26.07.00 Release: 0 Summary: Firmware Test Suite License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.6Jk98h/_old 2026-07-21 23:10:39.058811475 +0200 +++ /var/tmp/diff_new_pack.6Jk98h/_new 2026-07-21 23:10:39.066811748 +0200 @@ -2,6 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="versionformat">@PARENT_TAG@</param> <param name="url">https://github.com/fwts/fwts.git</param> + <param name="revision">V26.07.00</param> <param name="scm">git</param> <param name="changesgenerate">enable</param> <param name="exclude">.*</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.6Jk98h/_old 2026-07-21 23:10:39.222817082 +0200 +++ /var/tmp/diff_new_pack.6Jk98h/_new 2026-07-21 23:10:39.230817355 +0200 @@ -5,6 +5,6 @@ <param name="url">https://github.com/ColinIanKing/fwts.git</param> <param name="changesrevision">7a824d3b13fb4e33c3970fe560e36d2c65e7fb10</param></service><service name="tar_scm"> <param name="url">https://github.com/fwts/fwts.git</param> - <param name="changesrevision">885403fe8580a49023cbdbb5dca5560a2da1256d</param></service></servicedata> + <param name="changesrevision">b7c224c5c9950a7080a8023e8fb45abde2fdaa54</param></service></servicedata> (No newline at EOF) ++++++ fwts-26.05.00.obscpio -> fwts-26.07.00.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/auto-packager/mkpackage.sh new/fwts-26.07.00/auto-packager/mkpackage.sh --- old/fwts-26.05.00/auto-packager/mkpackage.sh 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/auto-packager/mkpackage.sh 2026-07-20 06:36:33.000000000 +0200 @@ -23,7 +23,7 @@ # Get fwts sources, strip out .git directory, add in necessary debian packaging # files, build source package ready for upload. # -RELEASES="bionic focal jammy noble questing resolute stonking" +RELEASES="bionic focal jammy noble resolute stonking" REPO=https://github.com/fwts/fwts RELEASE_TAR_URL=https://github.com/fwts/fwts/archive/refs/tags/ FWTS=fwts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/data/klog.json new/fwts-26.07.00/data/klog.json --- old/fwts-26.05.00/data/klog.json 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/data/klog.json 2026-07-20 06:36:33.000000000 +0200 @@ -7454,6 +7454,97 @@ "pattern": "Invalid command line: uid is too long", "advice": "The AMD IOMMU driver rejected an ivrs_acpihid command line parameter because the specified Unique ID (UID) exceeds the maximum allowed length. The IOMMU device override will not be applied.", "label": "KlogAmdIommuCmdlineUidTooLong" + }, + { + "compare_mode": "string", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "Partitioned interrupts not supported", + "advice": "The ACPI MPAM parser found a partitioned interrupt description, which is not supported. The MPAM interrupt cannot be registered and MPAM resource monitoring may not be usable.", + "label": "KlogAcpiMpamPartitionedInterruptsUnsupported" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "Failed to register interrupt 0x.* with ACPI", + "advice": "The ACPI MPAM driver failed to register a firmware-described interrupt with ACPI. MPAM overflow or error interrupt handling may not be available.", + "label": "KlogAcpiMpamInterruptRegisterFailed" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "Bad level (.*) for cache with id .*", + "advice": "The ACPI MPAM parser could not map a firmware-provided cache identifier to a valid cache level. The MPAM resource instance for that cache cannot be created.", + "label": "KlogAcpiMpamCacheLevelInvalid" + }, + { + "compare_mode": "string", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "MSC entry overlaps end of ACPI table", + "advice": "The ACPI MPAM table contains an MSC entry that extends past the end of the table. The table is malformed and MPAM parsing is aborted.", + "label": "KlogAcpiMpamMscEntryTableOverlap" + }, + { + "compare_mode": "string", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "Unrecognised MSC, MPAM not usable", + "advice": "The ACPI MPAM parser found an MSC entry with unsupported or reserved fields set. MPAM cannot be enabled safely with this firmware description.", + "label": "KlogAcpiMpamMscUnrecognised" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "cannot register GSI#.* (.*)", + "advice": "The ACPI AGDI driver failed to register the firmware-provided GSIV as a Linux interrupt. AGDI diagnostic dump and reset interrupt handling may not be available.", + "label": "KlogAcpiAgdiGsiRegisterFailed" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "cannot register IRQ .*", + "advice": "The ACPI AGDI driver failed to request the interrupt used for diagnostic dump and reset handling. AGDI interrupt signaling cannot be enabled.", + "label": "KlogAcpiAgdiIrqRegisterFailed" + }, + { + "compare_mode": "string", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "Could not find IOMMU node in RIMT", + "advice": "The RISC-V ACPI RIMT driver could not find a firmware IOMMU node matching the device. IOMMU translation setup for that device cannot proceed.", + "label": "KlogAcpiRimtIommuNodeNotFound" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_MEDIUM", + "pattern": "Error retrieving current fan status: .*", + "advice": "The ACPI fan driver could not evaluate the current fan status from firmware. Fan speed reporting and notification handling may be incomplete.", + "label": "KlogAcpiFanCurrentStatusFailed" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_MEDIUM", + "pattern": "Failed to update trip points: .*", + "advice": "The ACPI fan driver failed to update firmware trip points for fan speed notifications. Fan speed change notifications may be delayed or missed.", + "label": "KlogAcpiFanTripPointUpdateFailed" + }, + { + "compare_mode": "string", + "log_level": "LOG_LEVEL_MEDIUM", + "pattern": "Failed to start Microsoft fan extensions", + "advice": "The ACPI fan driver failed to start the Microsoft fan extension support used for fan trip point notifications. Enhanced fan status updates may not be available.", + "label": "KlogAcpiFanMicrosoftExtensionsStartFailed" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_MEDIUM", + "pattern": "CPU.*: Invalid FFH LPI data", + "advice": "The ACPI processor idle driver rejected firmware-provided FFH LPI data for a CPU. Low-power idle states for that CPU may be unavailable or fall back to other idle mechanisms.", + "label": "KlogAcpiProcessorIdleFfhLpiDataInvalid" + }, + { + "compare_mode": "regex", + "log_level": "LOG_LEVEL_HIGH", + "pattern": "E820 table full; ignoring \\[mem .*\\]", + "advice": "The x86 E820 memory map table is full, so the kernel ignored a firmware-provided memory range. The system memory map may be incomplete, which can affect memory reservation and device resource handling.", + "label": "KlogX86E820TableFull" } ], "pm_error_warning_patterns": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/debian/changelog new/fwts-26.07.00/debian/changelog --- old/fwts-26.05.00/debian/changelog 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/debian/changelog 2026-07-20 06:36:33.000000000 +0200 @@ -1,3 +1,41 @@ +fwts (26.07.00-0ubuntu1) stonking; urgency=medium + + [Dat Mach] + * tpmevlog: handle PCR[0] replay for EV_EFI_HCRTM_EVENT + + [Ivan Hu] + * dmi: dmicheck: fix bus error when copying SMBIOS tables from memory + * acpi: gpedump: Fix format string for BlockBaseNumber + * acpi: hest: Fix format strings for record/section counts + * acpi: tpm2: Fix format string for start_method + * tpm: tpmevlog: Fix format string for number_of_alg + * tpm: tpmevlogdump: Fix wrong field printed for specVersionMajor + * klog.json: Add ACPI MPAM error messages to klog database + * klog.json: Add ACPI AGDI interrupt registration error messages to klog + database + * klog.json: Add ACPI RIMT IOMMU lookup error message to klog database + * klog.json: Add ACPI fan status and extension error messages to klog database + * klog.json: Add ACPI processor FFH LPI error message to klog database + * klog.json: Add x86 E820 table overflow error message to klog database + * dmicheck: fix off-by-one in SMBIOS table size boundary check + * tpm2: accept Arm FF-A Start Method and validate its parameters + * fwts-test: update tpm2 expected output for Arm FF-A Start Method fix + * auto-packager: mkpackage.sh: remove questing + + [Marc Bornand] + * build: link to zlib + + [Thomas Huth] + * acpi: mcfg: Fix format string for pci_segment_group_number + * acpi: madt: Silence compiler warning when using Clang + * acpi: gpedump: Fix format string for BaseGpeNumber + * acpi: fadt: Fix format string for printing sci_int + + [Xiang W] + * uefi: uefibootpath: correct error message for UART stop bits validation + + -- Ivan Hu <[email protected]> Mon, 20 Jul 2026 04:36:32 +0000 + fwts (26.05.00-0ubuntu1) stonking; urgency=medium [Ivan Hu] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/fwts-test/tpm2-0001/tpm2-0002.log new/fwts-26.07.00/fwts-test/tpm2-0001/tpm2-0002.log --- old/fwts-26.05.00/fwts-test/tpm2-0001/tpm2-0002.log 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/fwts-test/tpm2-0001/tpm2-0002.log 2026-07-20 06:36:33.000000000 +0200 @@ -12,7 +12,7 @@ tpm2 FAILED [MEDIUM] TPM2ReservedNonZero: Test 1, TPM2 Reserved tpm2 field must be zero, got 0x0003 instead tpm2 FAILED [HIGH] TPM2BadStartMethod: Test 1, TPM2's Start -tpm2 Method must be between 0x1 and 0xd, got 0xff +tpm2 Method must be between 0x1 and 0xd or 0xf, got 0xff tpm2 tpm2 ========================================================== tpm2 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/snapcraft.yaml new/fwts-26.07.00/snapcraft.yaml --- old/fwts-26.05.00/snapcraft.yaml 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/snapcraft.yaml 2026-07-20 06:36:33.000000000 +0200 @@ -1,5 +1,5 @@ name: fwts -version: V26.05.00 +version: V26.07.00 summary: The Firmware Test Suite (FWTS) description: This is a firmware test suite that performs sanity checks on system firmware. It is intended to identify BIOS and ACPI errors and if appropriate it will try to explain the errors and give advice to help workaround or fix firmware bugs. It is primarily intended to be a Linux-centric firmware troubleshooting tool. confinement: devmode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/fadt/fadt.c new/fwts-26.07.00/src/acpi/fadt/fadt.c --- old/fwts-26.05.00/src/acpi/fadt/fadt.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/fadt/fadt.c 2026-07-20 06:36:33.000000000 +0200 @@ -1662,7 +1662,7 @@ * used to verify that the value is correct. */ if (!fwts_acpi_is_reduced_hardware(fw)) { - fwts_log_info(fw, "FADT SCI_INT is %" PRIu8, fadt->sci_int); + fwts_log_info(fw, "FADT SCI_INT is %" PRIu16, fadt->sci_int); acpi_table_check_fadt_smi_cmd(fw); acpi_table_check_fadt_acpi_enable(fw); acpi_table_check_fadt_acpi_disable(fw); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/gpedump/gpedump.c new/fwts-26.07.00/src/acpi/gpedump/gpedump.c --- old/fwts-26.05.00/src/acpi/gpedump/gpedump.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/gpedump/gpedump.c 2026-07-20 06:36:33.000000000 +0200 @@ -89,7 +89,7 @@ strncpy(buf, "unknown", sizeof(buf)); break; } - fwts_log_info_verbatim(fw, " GPE 0x%2.2" PRIx8 ":", + fwts_log_info_verbatim(fw, " GPE 0x%4.4" PRIx16 ":", gpe_block_info->BlockBaseNumber + gpe); fwts_log_info_verbatim(fw, " Flags: 0x%2.2" PRIx8 " (trigger: %s, wake: %s)", GpeEventInfo->Flags, @@ -137,7 +137,7 @@ fwts_log_nl(fw); fwts_log_info_verbatim(fw, - " Register %" PRIu32 ": (GPE 0x%2.2" PRIx8 "-0x%2.2" PRIx8 ")", + " Register %" PRIu32 ": (GPE 0x%4.4" PRIx16 "-0x%4.4" PRIx16 ")", reg, gpe_reg_info->BaseGpeNumber, gpe_reg_info->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/hest/hest.c new/fwts-26.07.00/src/acpi/hest/hest.c --- old/fwts-26.05.00/src/acpi/hest/hest.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/hest/hest.c 2026-07-20 06:36:33.000000000 +0200 @@ -326,7 +326,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST IA-32 Architecture NMI Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", err->number_of_records_to_preallocate); } @@ -335,7 +335,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST A-32 Architecture NMI Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", err->max_sections_per_record); } @@ -397,7 +397,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Root Port Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } @@ -406,7 +406,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Root Port Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", aer->max_sections_per_record); } @@ -465,7 +465,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Device Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } @@ -474,7 +474,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Device Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", aer->max_sections_per_record); } @@ -537,7 +537,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Bridge Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } @@ -546,7 +546,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Brdige Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", aer->max_sections_per_record); } @@ -626,7 +626,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST Hardware Error Source Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", source->number_of_records_to_preallocate); } @@ -635,7 +635,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST Hardware Error Source Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", source->max_sections_per_record); } @@ -740,7 +740,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST Hardware Error Source Number of Records " - "to Preallocate is 0x%" PRIx16 " and must be " + "to Preallocate is 0x%" PRIx32 " and must be " "more than zero.", source->number_of_records_to_preallocate); } @@ -749,7 +749,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST Hardware Error Source Max Sections Per " - "Record is 0x%" PRIx16 " and must be " + "Record is 0x%" PRIx32 " and must be " "more than zero.", source->max_sections_per_record); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/madt/madt.c new/fwts-26.07.00/src/acpi/madt/madt.c --- old/fwts-26.05.00/src/acpi/madt/madt.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/madt/madt.c 2026-07-20 06:36:33.000000000 +0200 @@ -128,8 +128,8 @@ #define SBBR_ACPI_MAJOR_VERSION 6 struct acpi_madt_subtable_lengths { - unsigned short major_version; /* from revision in FADT header */ - unsigned short minor_version; /* FADT field starting with 5.1 */ + uint8_t major_version; /* from revision in FADT header */ + uint8_t minor_version; /* FADT field starting with 5.1 */ unsigned short madt_version; /* MADT revision */ unsigned short num_types; /* types possible for this version */ unsigned short lengths[NUM_SUBTABLE_TYPES]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/mcfg/mcfg.c new/fwts-26.07.00/src/acpi/mcfg/mcfg.c --- old/fwts-26.05.00/src/acpi/mcfg/mcfg.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/mcfg/mcfg.c 2026-07-20 06:36:33.000000000 +0200 @@ -199,7 +199,7 @@ for (i = 0; i < nr; i++, config++) { fwts_log_info_verbatim(fw, "Configuration Entry #%d:", i); fwts_log_info_verbatim(fw, " Base Address : 0x%" PRIx64, config->base_address); - fwts_log_info_verbatim(fw, " Segment : %" PRIu8, config->pci_segment_group_number); + fwts_log_info_verbatim(fw, " Segment : %" PRIu16, config->pci_segment_group_number); fwts_log_info_verbatim(fw, " Start bus : %" PRIu8, config->start_bus_number); fwts_log_info_verbatim(fw, " End bus : %" PRIu8, config->end_bus_number); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/acpi/tpm2/tpm2.c new/fwts-26.07.00/src/acpi/tpm2/tpm2.c --- old/fwts-26.05.00/src/acpi/tpm2/tpm2.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/acpi/tpm2/tpm2.c 2026-07-20 06:36:33.000000000 +0200 @@ -51,11 +51,11 @@ fwts_acpi_reserved_zero("TPM2", "Reserved", tpm2->reserved, &passed); - if (tpm2->start_method < 1 || tpm2->start_method >= 14) { + if (tpm2->start_method < 1 || tpm2->start_method == 14 || tpm2->start_method > 15) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TPM2BadStartMethod", - "TPM2's Start Method must be between 0x1 and 0xd, got 0x%" PRIx16, + "TPM2's Start Method must be between 0x1 and 0xd or 0xf, got 0x%" PRIx32, tpm2->start_method); } @@ -78,6 +78,24 @@ "got 0x%" PRIx32, (uint32_t) sizeof(fwts_acpi_table_tpm2) + 12, (uint32_t) table->length); } + + if (tpm2->start_method == 13 && table->length < sizeof(fwts_acpi_table_tpm2) + 16) { + passed = false; + fwts_failed(fw, LOG_LEVEL_HIGH, + "TPM2BadPlatformParameters", + "Table length must be at least 0x%" PRIx32 " if Start Method equals 13, " + "got 0x%" PRIx32, (uint32_t) sizeof(fwts_acpi_table_tpm2) + 16, + (uint32_t) table->length); + } + + if (tpm2->start_method == 15 && table->length < sizeof(fwts_acpi_table_tpm2) + 12) { + passed = false; + fwts_failed(fw, LOG_LEVEL_HIGH, + "TPM2BadPlatformParameters", + "Table length must be at least 0x%" PRIx32 " if Start Method equals 15, " + "got 0x%" PRIx32, (uint32_t) sizeof(fwts_acpi_table_tpm2) + 12, + (uint32_t) table->length); + } } if (passed) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/dmi/dmicheck/dmicheck.c new/fwts-26.07.00/src/dmi/dmicheck/dmicheck.c --- old/fwts-26.05.00/src/dmi/dmicheck/dmicheck.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/dmi/dmicheck/dmicheck.c 2026-07-20 06:36:33.000000000 +0200 @@ -378,7 +378,7 @@ return FWTS_ERROR; for (p = buf, total = count = 0; ; p += count) { - if (total >= sz) { + if (total > sz) { close(fd); return FWTS_ERROR; } @@ -442,8 +442,12 @@ return NULL; } table = malloc(length); - if (table) - memcpy(table, mem, length); + if (table && fwts_safe_memcpy(table, mem, length) != FWTS_OK) { + fwts_log_info(fw, "SMBIOS table at %p cannot be read", (void *)addr); + free(table); + (void)fwts_munmap(mem, length); + return NULL; + } (void)fwts_munmap(mem, length); return table; } @@ -498,8 +502,12 @@ return NULL; } table = malloc(length); - if (table) - memcpy(table, mem, length); + if (table && fwts_safe_memcpy(table, mem, length) != FWTS_OK) { + fwts_log_info(fw, "SMBIOS table at %p cannot be read", (void *)addr); + free(table); + (void)fwts_munmap(mem, length); + return NULL; + } (void)fwts_munmap(mem, length); return table; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/lib/include/fwts_tpm.h new/fwts-26.07.00/src/lib/include/fwts_tpm.h --- old/fwts-26.05.00/src/lib/include/fwts_tpm.h 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/lib/include/fwts_tpm.h 2026-07-20 06:36:33.000000000 +0200 @@ -124,6 +124,13 @@ EV_EFI_SPDM_DEVICE_AUTHORITY = 0x800000e4, } fwts_tpmlog_event_type; +/* + * H-CRTM resets PCR[0] to the locality-4 startup value (0...04, locality in + * the last octet) before extending the H-CRTM data; see TPM 2.0 Library + * Part 1, "H-CRTM before TPM2_Startup()". + */ +#define TPM2_HCRTM_PCR0_LOCALITY 0x04 + typedef struct { uint32_t pcr_index; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/lib/include/fwts_version.h new/fwts-26.07.00/src/lib/include/fwts_version.h --- old/fwts-26.05.00/src/lib/include/fwts_version.h 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/lib/include/fwts_version.h 2026-07-20 06:36:33.000000000 +0200 @@ -16,5 +16,5 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ -#define FWTS_VERSION "V26.05.00" -#define FWTS_DATE "2026-05-27 03:26:14" +#define FWTS_VERSION "V26.07.00" +#define FWTS_DATE "2026-07-20 04:36:33" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/lib/src/Makefile.am new/fwts-26.07.00/src/lib/src/Makefile.am --- old/fwts-26.05.00/src/lib/src/Makefile.am 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/lib/src/Makefile.am 2026-07-20 06:36:33.000000000 +0200 @@ -35,7 +35,7 @@ endif libfwts_la_LIBADD = \ - -lm -lpthread \ + -lm -lpthread -lz \ $(libfwts_LDADD_BSD) \ @GIO_LIBS@ \ @GLIB_LIBS@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/tpm/tpmevlog/tpmevlog.c new/fwts-26.07.00/src/tpm/tpmevlog/tpmevlog.c --- old/fwts-26.05.00/src/tpm/tpmevlog/tpmevlog.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/tpm/tpmevlog/tpmevlog.c 2026-07-20 06:36:33.000000000 +0200 @@ -255,6 +255,7 @@ fwts_spec_id_event_alg_sz *alg_sz; bool separator_seen[TPM2_FIRMWARE_PCR_COUNT] = { false }; bool startuplocality_seen = false; + bool hcrtm_seen = false; /* specid_event_check */ if (len < sizeof(fwts_pc_client_pcr_event)) { @@ -327,7 +328,7 @@ fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvAlgNumber", "The number of Hash algorithms of SpecId event must " "be set to a value of 0x01 or greater " - "got 0x%" PRIx8 ".", specid_evcent->number_of_alg); + "got 0x%" PRIx32 ".", specid_evcent->number_of_alg); return FWTS_ERROR; } @@ -421,6 +422,13 @@ if ((!tpmevlog_parsed) && (alg_id == TPM2_ALG_SHA256) && (pcr_event2->event_type != EV_NO_ACTION) && (pcr_event2->pcr_index < TPM2_FIRMWARE_PCR_COUNT)) { + /* H-CRTM reseeds PCR[0] before its digest is extended. */ + if (pcr_event2->event_type == EV_EFI_HCRTM_EVENT && + pcr_event2->pcr_index == 0) { + tpmevlog_pcrs.pcr[0][TPM2_SHA256_DIGEST_SIZE - 1] = + TPM2_HCRTM_PCR0_LOCALITY; + hcrtm_seen = true; + } fwts_tpm_extend_pcr(tpmevlog_pcrs.pcr[pcr_event2->pcr_index], TPM2_SHA256_DIGEST_SIZE, alg_id, @@ -454,7 +462,8 @@ pdata += sizeof(event_size); len_remain -= sizeof(event_size); - if (pcr_event2->event_type == EV_NO_ACTION && + if (!hcrtm_seen && + pcr_event2->event_type == EV_NO_ACTION && pcr_event2->pcr_index == 0 && event_size == 17 && memcmp(pdata, "StartupLocality", sizeof("StartupLocality")) == 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/tpm/tpmevlogdump/tpmevlogdump.c new/fwts-26.07.00/src/tpm/tpmevlogdump/tpmevlogdump.c --- old/fwts-26.05.00/src/tpm/tpmevlogdump/tpmevlogdump.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/tpm/tpmevlogdump/tpmevlogdump.c 2026-07-20 06:36:33.000000000 +0200 @@ -274,7 +274,7 @@ fwts_log_info_verbatim(fw, " Signature: %s", (char *)specid_evcent->signature); fwts_log_info_verbatim(fw, " platformClass: 0x%8.8" PRIx32, specid_evcent->platform_class); fwts_log_info_verbatim(fw, " specVersionMinor: 0x%" PRIx8, specid_evcent->spec_version_minor); - fwts_log_info_verbatim(fw, " specVersionMajor: 0x%" PRIx8, specid_evcent->platform_class); + fwts_log_info_verbatim(fw, " specVersionMajor: 0x%" PRIx8, specid_evcent->spec_version_major); fwts_log_info_verbatim(fw, " specErrata: 0x%" PRIx8, specid_evcent->spec_errata); fwts_log_info_verbatim(fw, " uintnSize: 0x%" PRIx8, specid_evcent->uintn_size); fwts_log_info_verbatim(fw, " NumberOfAlgorithms: 0x%8.8" PRIx32, specid_evcent->number_of_alg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fwts-26.05.00/src/uefi/uefibootpath/uefibootpath.c new/fwts-26.07.00/src/uefi/uefibootpath/uefibootpath.c --- old/fwts-26.05.00/src/uefi/uefibootpath/uefibootpath.c 2026-05-27 05:26:14.000000000 +0200 +++ new/fwts-26.07.00/src/uefi/uefibootpath/uefibootpath.c 2026-07-20 06:36:33.000000000 +0200 @@ -379,9 +379,9 @@ } if (u->stop_bits > 3) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUARTDevPathConfInvalid", - "The Parity value of UART Device Path is %" PRIu8 + "The Stop Bits value of UART Device Path is %" PRIu8 " which is out of configuration range.", - u->parity); + u->stop_bits); errors++; } break; ++++++ fwts.obsinfo ++++++ --- /var/tmp/diff_new_pack.6Jk98h/_old 2026-07-21 23:10:41.286887651 +0200 +++ /var/tmp/diff_new_pack.6Jk98h/_new 2026-07-21 23:10:41.290887788 +0200 @@ -1,5 +1,5 @@ name: fwts -version: 26.05.00 -mtime: 1779852374 -commit: 885403fe8580a49023cbdbb5dca5560a2da1256d +version: 26.07.00 +mtime: 1784522193 +commit: b7c224c5c9950a7080a8023e8fb45abde2fdaa54
