mirror of
https://github.com/LongSoft/UEFITool.git
synced 2024-11-25 09:28:22 +08:00
Fix LoaderVersion and UpdateVersion handling in MCU
This commit is contained in:
parent
8bddbe7d1f
commit
967375243c
@ -1280,12 +1280,15 @@ BOOLEAN FfsParser::microcodeHeaderValid(const INTEL_MICROCODE_HEADER* ucodeHeade
|
|||||||
ucodeHeader->DateYear > 0x2049) {
|
ucodeHeader->DateYear > 0x2049) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
// Check UpdateVersion to be 1.
|
||||||
// Check LoaderRevision to be less than 0x100
|
if (ucodeHeader->UpdateVersion != 1) {
|
||||||
if (ucodeHeader->LoaderRevision > 0xFF) {
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
// Check LoaderVersion to be 1.
|
||||||
|
if (ucodeHeader->LoaderVersion != 1) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4356,7 +4359,7 @@ USTATUS FfsParser::parseIntelMicrocodeHeader(const UByteArray & microcode, const
|
|||||||
// Add info
|
// Add info
|
||||||
UString name("Intel microcode");
|
UString name("Intel microcode");
|
||||||
UString info = usprintf("Full size: %Xh (%u)\nHeader size: %Xh (%u)\nBody size: %Xh (%u)\nTail size: %Xh (%u)\n"
|
UString info = usprintf("Full size: %Xh (%u)\nHeader size: %Xh (%u)\nBody size: %Xh (%u)\nTail size: %Xh (%u)\n"
|
||||||
"Date: %02X.%02X.%04x\nCPU signature: %08Xh\nRevision: %08Xh\nLoader revision: %08Xh\nCPU flags: %02Xh\nChecksum: %08Xh, ",
|
"Date: %02X.%02X.%04x\nCPU signature: %08Xh\nRevision: %08Xh\nCPU flags: %02Xh\nChecksum: %08Xh, ",
|
||||||
dataSize, dataSize,
|
dataSize, dataSize,
|
||||||
header.size(), header.size(),
|
header.size(), header.size(),
|
||||||
body.size(), body.size(),
|
body.size(), body.size(),
|
||||||
@ -4366,7 +4369,6 @@ USTATUS FfsParser::parseIntelMicrocodeHeader(const UByteArray & microcode, const
|
|||||||
ucodeHeader->DateYear,
|
ucodeHeader->DateYear,
|
||||||
ucodeHeader->CpuSignature,
|
ucodeHeader->CpuSignature,
|
||||||
ucodeHeader->Revision,
|
ucodeHeader->Revision,
|
||||||
ucodeHeader->LoaderRevision,
|
|
||||||
ucodeHeader->CpuFlags,
|
ucodeHeader->CpuFlags,
|
||||||
ucodeHeader->Checksum)
|
ucodeHeader->Checksum)
|
||||||
+ (ucodeHeader->Checksum == calculated ? UString("valid") : usprintf("invalid, should be %08Xh", calculated))
|
+ (ucodeHeader->Checksum == calculated ? UString("valid") : usprintf("invalid, should be %08Xh", calculated))
|
||||||
|
@ -60,7 +60,7 @@ typedef struct {
|
|||||||
|
|
||||||
// This scructure is described in Section 9.11.1 of the Intel Software Developer manual Volume 3A Part 1
|
// This scructure is described in Section 9.11.1 of the Intel Software Developer manual Volume 3A Part 1
|
||||||
typedef struct INTEL_MICROCODE_HEADER_ {
|
typedef struct INTEL_MICROCODE_HEADER_ {
|
||||||
UINT32 Version; // 0x00000001
|
UINT32 UpdateVersion; // 0x00000001
|
||||||
UINT32 Revision;
|
UINT32 Revision;
|
||||||
UINT16 DateYear; // BCD
|
UINT16 DateYear; // BCD
|
||||||
UINT8 DateDay; // BCD
|
UINT8 DateDay; // BCD
|
||||||
@ -69,7 +69,7 @@ typedef struct INTEL_MICROCODE_HEADER_ {
|
|||||||
UINT32 Checksum; // Checksum of Update Data and Header. Used to verify the integrity of the update header and data.
|
UINT32 Checksum; // Checksum of Update Data and Header. Used to verify the integrity of the update header and data.
|
||||||
// Checksum is correct when the summation of all the DWORDs (including the extended Processor Signature Table)
|
// Checksum is correct when the summation of all the DWORDs (including the extended Processor Signature Table)
|
||||||
// that comprise the microcode update result in 00000000H.
|
// that comprise the microcode update result in 00000000H.
|
||||||
UINT32 LoaderRevision; // Sane values are less than 0x100
|
UINT32 LoaderVersion; // 0x00000001
|
||||||
UINT8 CpuFlags;
|
UINT8 CpuFlags;
|
||||||
UINT8 CpuFlagsReserved[3]; // Zeroes
|
UINT8 CpuFlagsReserved[3]; // Zeroes
|
||||||
UINT32 DataSize; // Specifies the size of the encrypted data in bytes, and must be a multiple of DWORDs.
|
UINT32 DataSize; // Specifies the size of the encrypted data in bytes, and must be a multiple of DWORDs.
|
||||||
|
Loading…
Reference in New Issue
Block a user