X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelSiliconPkg%2FFeature%2FCapsule%2FMicrocodeUpdateDxe%2FMicrocodeUpdate.c;h=e45c7a8def0d104dda1d21ffa1112e00fe312e61;hp=9b5757da715a3b6520f773202af4f35d047c0adb;hb=5170327b7144e19c088df0c474adbbe7b5869b08;hpb=f635b13853fd13003d563172ba73d026c9fc6f25 diff --git a/IntelSiliconPkg/Feature/Capsule/MicrocodeUpdateDxe/MicrocodeUpdate.c b/IntelSiliconPkg/Feature/Capsule/MicrocodeUpdateDxe/MicrocodeUpdate.c index 9b5757da71..e45c7a8def 100644 --- a/IntelSiliconPkg/Feature/Capsule/MicrocodeUpdateDxe/MicrocodeUpdate.c +++ b/IntelSiliconPkg/Feature/Capsule/MicrocodeUpdateDxe/MicrocodeUpdate.c @@ -390,6 +390,7 @@ VerifyMicrocode ( UINTN DataSize; UINT32 CurrentRevision; PROCESSOR_INFO *ProcessorInfo; + UINT32 InCompleteCheckSum32; UINT32 CheckSum32; UINTN ExtendedTableLength; UINT32 ExtendedTableCount; @@ -488,6 +489,10 @@ VerifyMicrocode ( } return EFI_VOLUME_CORRUPTED; } + InCompleteCheckSum32 = CheckSum32; + InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorSignature.Uint32; + InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags; + InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum; // // Check ProcessorSignature/ProcessorFlags @@ -522,7 +527,10 @@ VerifyMicrocode ( } else { ExtendedTable = (CPU_MICROCODE_EXTENDED_TABLE *)(ExtendedTableHeader + 1); for (Index = 0; Index < ExtendedTableCount; Index++) { - CheckSum32 = CalculateSum32((UINT32 *)ExtendedTable, sizeof(CPU_MICROCODE_EXTENDED_TABLE)); + CheckSum32 = InCompleteCheckSum32; + CheckSum32 += ExtendedTable->ProcessorSignature.Uint32; + CheckSum32 += ExtendedTable->ProcessorFlag; + CheckSum32 += ExtendedTable->Checksum; if (CheckSum32 != 0) { DEBUG((DEBUG_ERROR, "VerifyMicrocode - The checksum for ExtendedTable entry with index 0x%x is incorrect\n", Index)); } else {