UINTN DataSize;\r
UINT32 CurrentRevision;\r
PROCESSOR_INFO *ProcessorInfo;\r
+ UINT32 InCompleteCheckSum32;\r
UINT32 CheckSum32;\r
UINTN ExtendedTableLength;\r
UINT32 ExtendedTableCount;\r
}\r
return EFI_VOLUME_CORRUPTED;\r
}\r
+ InCompleteCheckSum32 = CheckSum32;\r
+ InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorSignature.Uint32;\r
+ InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags;\r
+ InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum;\r
\r
//\r
// Check ProcessorSignature/ProcessorFlags\r
} else {\r
ExtendedTable = (CPU_MICROCODE_EXTENDED_TABLE *)(ExtendedTableHeader + 1);\r
for (Index = 0; Index < ExtendedTableCount; Index++) {\r
- CheckSum32 = CalculateSum32((UINT32 *)ExtendedTable, sizeof(CPU_MICROCODE_EXTENDED_TABLE));\r
+ CheckSum32 = InCompleteCheckSum32;\r
+ CheckSum32 += ExtendedTable->ProcessorSignature.Uint32;\r
+ CheckSum32 += ExtendedTable->ProcessorFlag;\r
+ CheckSum32 += ExtendedTable->Checksum;\r
if (CheckSum32 != 0) {\r
DEBUG((DEBUG_ERROR, "VerifyMicrocode - The checksum for ExtendedTable entry with index 0x%x is incorrect\n", Index));\r
} else {\r