Reviewed-by: Ray Ni <ray...@intel.com>
> -----Original Message----- > From: edk2-devel <edk2-devel-boun...@lists.01.org> On Behalf Of Chen A > Chen > Sent: Thursday, February 28, 2019 2:03 PM > To: edk2-devel@lists.01.org > Cc: Dong, Eric <eric.d...@intel.com> > Subject: [edk2] [PATCH 1/2] UefiCpuPkg/Microcode: Fix InComplete > CheckSum32 issue > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1020 > > The Microcode region indicated by MicrocodePatchAddress PCD may contain > more than one Microcode entry. We should save InCompleteCheckSum32 > value for each payload. Move the logic for calculate InCompleteCheckSum32 > from the outsize of the do-while loop to the inside. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Chen A Chen <chen.a.c...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Eric Dong <eric.d...@intel.com> > --- > UefiCpuPkg/Library/MpInitLib/Microcode.c | 37 ++++++++++++++++--------- > ------- > 1 file changed, 19 insertions(+), 18 deletions(-) > > diff --git a/UefiCpuPkg/Library/MpInitLib/Microcode.c > b/UefiCpuPkg/Library/MpInitLib/Microcode.c > index e1f661d6b1..5f9ae22794 100644 > --- a/UefiCpuPkg/Library/MpInitLib/Microcode.c > +++ b/UefiCpuPkg/Library/MpInitLib/Microcode.c > @@ -159,30 +159,31 @@ MicrocodeDetect ( > MicrocodeEnd = (UINTN) (CpuMpData->MicrocodePatchAddress + > CpuMpData->MicrocodePatchRegionSize); > MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (UINTN) > CpuMpData->MicrocodePatchAddress; > > - // > - // Save an in-complete CheckSum32 from CheckSum Part1 for common > parts. > - // > - if (MicrocodeEntryPoint->DataSize == 0) { > - InCompleteCheckSum32 = CalculateSum32 ( > - (UINT32 *) MicrocodeEntryPoint, > - sizeof (CPU_MICROCODE_HEADER) + 2000 > - ); > - } else { > - InCompleteCheckSum32 = CalculateSum32 ( > - (UINT32 *) MicrocodeEntryPoint, > - sizeof (CPU_MICROCODE_HEADER) + > MicrocodeEntryPoint- > >DataSize > - ); > - } > - InCompleteCheckSum32 -= MicrocodeEntryPoint- > >ProcessorSignature.Uint32; > - InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags; > - InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum; > - > do { > // > // Check if the microcode is for the Cpu and the version is newer > // and the update can be processed on the platform > // > CorrectMicrocode = FALSE; > + > + // > + // Save an in-complete CheckSum32 from CheckSum Part1 for common > parts. > + // > + if (MicrocodeEntryPoint->DataSize == 0) { > + InCompleteCheckSum32 = CalculateSum32 ( > + (UINT32 *) MicrocodeEntryPoint, > + sizeof (CPU_MICROCODE_HEADER) + 2000 > + ); > + } else { > + InCompleteCheckSum32 = CalculateSum32 ( > + (UINT32 *) MicrocodeEntryPoint, > + sizeof (CPU_MICROCODE_HEADER) + > MicrocodeEntryPoint- > >DataSize > + ); > + } > + InCompleteCheckSum32 -= MicrocodeEntryPoint- > >ProcessorSignature.Uint32; > + InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags; > + InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum; > + > if (MicrocodeEntryPoint->HeaderVersion == 0x1) { > // > // It is the microcode header. It is not the padding data between > microcode patches > -- > 2.16.2.windows.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel