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

Reply via email to