platomav/MCExtractor

Some of latest Intel microcodes not detected

Closed this issue · 3 comments

ichee commented

Intel microcode version 3303 for CPUID's 50656 and 50657 are not seen as a microcode by MCE.

The latest version of UEFITool NE can see them properly.

Listed microcode above found at: https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files

UEFITool NE found at: https://github.com/LongSoft/UEFITool

MCE microcode file:
mce_cap

MCE modded BIOS:
mce_mod_cap

UEFITool NE:
uefitool_cap

For a comparison, the previous microcode 3302 for CPUID's 50656 and 50657 are detected properly.

MCE previous modded BIOS:
mce_mod_prev_cap

It appears that after 27 (!) years, Intel decided to start using the "Reserved" fields at the end of the microcode header from 0x24-0x30. Thus, I have removed the "Reserved" bytes from the end of the Intel regex pattern and any such updates can be properly detected now.

The earliest such microcode I was able to find in a quick scan is from August 2022, so I assume this changes happened in the middle of last year. It's probable that some microcodes may have been lost in the meantime, but hopefully they can be detected and added at some point in the future. For now, I was able to find and add 25 missing microcodes.

The latest commit 7e58a44 should have fixed the problem, and I'm thus going to close this issue as completed.

Huge thanks for the report @ichee and for using MCE.

@platomav Yeah, some politics started with https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a77a94f86273ce42a39cb479217dd8d68acfe0ff removing the ability to do late microcode loading in Linux (5.19)

https://lore.kernel.org/lkml/20230130213955.6046-7-ashok.raj@intel.com/ has a few details about the new scheme.

This is fascinating, thank you for the resources @andyhhp. Reading that list but also the commits from "arch/x86/include/asm/microcode_intel.h", it appears Intel has been busy lately with the microcode format. Here are the changes I read about:

  1. Header Version (i.e. 0x00-0x04) is actually Header Type with 1 meaning "Microcode" and 2 "In-Field Scan" (IFS).
  2. Reserved 1/3 (i.e. 0x24-0x28) is now IFS Metadata Size for the Header Type 2 structures.
  3. Reserved 2/3 (i.e. 0x28-0x2C) is now Minimum Required Version for avoiding OS Kernel Late Loading incompatibilities.

I have created a new ticket #60 to track these new additions to MCE.