mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/Microcode.c: Add verification before calculate CheckSum32
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1020 Should make sure the TotalSize of Microcode is aligned with 4 bytes before calling CalculateSum32 function. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Chen A Chen <chen.a.chen@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com>
This commit is contained in:
parent
8ef3a6ec1f
commit
219e560c20
|
@ -166,20 +166,29 @@ MicrocodeDetect (
|
|||
//
|
||||
CorrectMicrocode = FALSE;
|
||||
|
||||
if (MicrocodeEntryPoint->DataSize == 0) {
|
||||
TotalSize = sizeof (CPU_MICROCODE_HEADER) + 2000;
|
||||
} else {
|
||||
TotalSize = sizeof (CPU_MICROCODE_HEADER) + MicrocodeEntryPoint->DataSize;
|
||||
}
|
||||
|
||||
///
|
||||
/// Check overflow and whether TotalSize is aligned with 4 bytes.
|
||||
///
|
||||
if ( ((UINTN)MicrocodeEntryPoint + TotalSize) > MicrocodeEnd ||
|
||||
(TotalSize & 0x3) != 0
|
||||
) {
|
||||
MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (((UINTN) MicrocodeEntryPoint) + SIZE_1KB);
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// 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 = CalculateSum32 (
|
||||
(UINT32 *) MicrocodeEntryPoint,
|
||||
TotalSize
|
||||
);
|
||||
InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorSignature.Uint32;
|
||||
InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags;
|
||||
InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum;
|
||||
|
|
Loading…
Reference in New Issue