diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c index 2011b05836..50bef1c157 100644 --- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c @@ -3823,6 +3823,7 @@ UefiDevicePathLibConvertTextToDevicePath ( while ((DeviceNodeStr = GetNextDeviceNodeStr (&Str, &IsInstanceEnd)) != NULL) { DeviceNode = UefiDevicePathLibConvertTextToDeviceNode (DeviceNodeStr); + // MU_CHANGE - CodeQL Change: Note: DeviceNode may be NULL. That is an expected input in AppendDevicePathNode(). NewDevicePath = AppendDevicePathNode (DevicePath, DeviceNode); if (DevicePath != NULL) { FreePool (DevicePath); @@ -3836,7 +3837,13 @@ UefiDevicePathLibConvertTextToDevicePath ( if (IsInstanceEnd) { DeviceNode = (EFI_DEVICE_PATH_PROTOCOL *)AllocatePool (END_DEVICE_PATH_LENGTH); - ASSERT (DeviceNode != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (DeviceNode == NULL) { + ASSERT (DeviceNode != NULL); + return NULL; + } + + // MU_CHANGE [END] - CodeQL change SetDevicePathEndNode (DeviceNode); DeviceNode->SubType = END_INSTANCE_DEVICE_PATH_SUBTYPE; diff --git a/UefiCpuPkg/Library/CpuCommonFeaturesLib/MachineCheck.c b/UefiCpuPkg/Library/CpuCommonFeaturesLib/MachineCheck.c index d8b070d9f1..dfe129db7e 100644 --- a/UefiCpuPkg/Library/CpuCommonFeaturesLib/MachineCheck.c +++ b/UefiCpuPkg/Library/CpuCommonFeaturesLib/MachineCheck.c @@ -174,7 +174,8 @@ McaInitialize ( } if (PcdGetBool (PcdIsPowerOnReset)) { - for (BankIndex = 0; BankIndex < (UINTN)McgCap.Bits.Count; BankIndex++) { + for (BankIndex = 0; BankIndex < (UINT32)McgCap.Bits.Count; BankIndex++) { + // MU_CHANGE - CodeQL change CPU_REGISTER_TABLE_WRITE64 ( ProcessorNumber, Msr, diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c index 3e38676b23..88b034223d 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c @@ -71,7 +71,13 @@ SetExceptionHandlerData ( IdtTable = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base; Exception0StubHeader = AllocatePool (sizeof (*Exception0StubHeader)); - ASSERT (Exception0StubHeader != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (Exception0StubHeader == NULL) { + ASSERT (Exception0StubHeader != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change CopyMem ( Exception0StubHeader->ExceptionStubHeader, (VOID *)ArchGetIdtHandler (&IdtTable[0]), @@ -165,10 +171,23 @@ InitializeCpuExceptionHandlers ( RESERVED_VECTORS_DATA *ReservedVectors; ReservedVectors = AllocatePool (sizeof (RESERVED_VECTORS_DATA) * CPU_EXCEPTION_NUM); - ASSERT (ReservedVectors != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (ReservedVectors == NULL) { + ASSERT (ReservedVectors != NULL); + return EFI_OUT_OF_RESOURCES; + } + + // MU_CHANGE [END] - CodeQL change ExceptionHandlerData = AllocatePool (sizeof (EXCEPTION_HANDLER_DATA)); - ASSERT (ExceptionHandlerData != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (ExceptionHandlerData == NULL) { + ASSERT (ExceptionHandlerData != NULL); + FreePool (ReservedVectors); + return EFI_OUT_OF_RESOURCES; + } + + // MU_CHANGE [END] - CodeQL change ExceptionHandlerData->IdtEntryCount = CPU_EXCEPTION_NUM; ExceptionHandlerData->ReservedVectors = ReservedVectors; ExceptionHandlerData->ExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * ExceptionHandlerData->IdtEntryCount); diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index a8e4f920fc..3e71d6a8af 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -95,6 +95,7 @@ CpuInitDataInitialize ( EFI_STATUS Status; UINTN ProcessorNumber; EFI_PROCESSOR_INFORMATION ProcessorInfoBuffer; + CPU_STATUS_INFORMATION CpuStatusBackupBuffer; // MU_CHANGE - CodeQL change CPU_FEATURES_ENTRY *CpuFeature; CPU_FEATURES_INIT_ORDER *InitOrder; CPU_FEATURES_DATA *CpuFeaturesData; @@ -120,7 +121,24 @@ CpuInitDataInitialize ( Package = 0; Thread = 0; + // MU_CHANGE [BEGIN] - CodeQL change + CpuFeaturesData = NULL; + CpuStatus = NULL; + FirstCore = NULL; + InitOrder = NULL; + Location = NULL; + ThreadCountPerCore = NULL; + ThreadCountPerPackage = NULL; + // MU_CHANGE [END] - CodeQL change + CpuFeaturesData = GetCpuFeaturesData (); + // MU_CHANGE [BEGIN] - CodeQL change + if (CpuFeaturesData == NULL) { + ASSERT (CpuFeaturesData != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change // // Initialize CpuFeaturesData->MpService as early as possile, so later function can use it. @@ -130,7 +148,13 @@ CpuInitDataInitialize ( GetNumberOfProcessor (&NumberOfCpus, &NumberOfEnabledProcessors); CpuFeaturesData->InitOrder = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (CPU_FEATURES_INIT_ORDER) * NumberOfCpus)); - ASSERT (CpuFeaturesData->InitOrder != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (CpuFeaturesData->InitOrder == NULL) { + ASSERT (CpuFeaturesData->InitOrder != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (CpuFeaturesData->InitOrder, sizeof (CPU_FEATURES_INIT_ORDER) * NumberOfCpus); // @@ -150,19 +174,38 @@ CpuInitDataInitialize ( CpuFeaturesData->NumberOfCpus = (UINT32)NumberOfCpus; AcpiCpuData = GetAcpiCpuData (); - ASSERT (AcpiCpuData != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (AcpiCpuData == NULL) { + ASSERT (AcpiCpuData != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change CpuFeaturesData->AcpiCpuData = AcpiCpuData; CpuStatus = &AcpiCpuData->CpuFeatureInitData.CpuStatus; - Location = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (EFI_CPU_PHYSICAL_LOCATION) * NumberOfCpus)); - ASSERT (Location != NULL); + CopyMem (&CpuStatusBackupBuffer, CpuStatus, sizeof (CpuStatusBackupBuffer)); // MU_CHANGE - CodeQL change + Location = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (EFI_CPU_PHYSICAL_LOCATION) * NumberOfCpus)); + // MU_CHANGE [BEGIN] - CodeQL change + if (Location == NULL) { + ASSERT (Location != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (Location, sizeof (EFI_CPU_PHYSICAL_LOCATION) * NumberOfCpus); AcpiCpuData->CpuFeatureInitData.ApLocation = (EFI_PHYSICAL_ADDRESS)(UINTN)Location; for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { InitOrder = &CpuFeaturesData->InitOrder[ProcessorNumber]; InitOrder->FeaturesSupportedMask = AllocateZeroPool (CpuFeaturesData->BitMaskSize); - ASSERT (InitOrder->FeaturesSupportedMask != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (InitOrder->FeaturesSupportedMask == NULL) { + ASSERT (InitOrder->FeaturesSupportedMask != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change InitializeListHead (&InitOrder->OrderList); Status = GetProcessorInformation (ProcessorNumber, &ProcessorInfoBuffer); ASSERT_EFI_ERROR (Status); @@ -214,12 +257,26 @@ CpuInitDataInitialize ( // Collect valid core count in each package because not all cores are valid. // ThreadCountPerPackage = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (UINT32) * CpuStatus->PackageCount)); - ASSERT (ThreadCountPerPackage != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (ThreadCountPerPackage == NULL) { + ASSERT (ThreadCountPerPackage != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change + ZeroMem (ThreadCountPerPackage, sizeof (UINT32) * CpuStatus->PackageCount); CpuStatus->ThreadCountPerPackage = (EFI_PHYSICAL_ADDRESS)(UINTN)ThreadCountPerPackage; ThreadCountPerCore = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (UINT8) * CpuStatus->PackageCount * CpuStatus->MaxCoreCount)); - ASSERT (ThreadCountPerCore != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (ThreadCountPerCore == NULL) { + ASSERT (ThreadCountPerCore != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change + ZeroMem (ThreadCountPerCore, sizeof (UINT8) * CpuStatus->PackageCount * CpuStatus->MaxCoreCount); CpuStatus->ThreadCountPerCore = (EFI_PHYSICAL_ADDRESS)(UINTN)ThreadCountPerCore; @@ -247,9 +304,22 @@ CpuInitDataInitialize ( } CpuFeaturesData->CpuFlags.CoreSemaphoreCount = AllocateZeroPool (sizeof (UINT32) * CpuStatus->PackageCount * CpuStatus->MaxCoreCount * CpuStatus->MaxThreadCount); - ASSERT (CpuFeaturesData->CpuFlags.CoreSemaphoreCount != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (CpuFeaturesData->CpuFlags.CoreSemaphoreCount == NULL) { + ASSERT (CpuFeaturesData->CpuFlags.CoreSemaphoreCount != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change + CpuFeaturesData->CpuFlags.PackageSemaphoreCount = AllocateZeroPool (sizeof (UINT32) * CpuStatus->PackageCount * CpuStatus->MaxCoreCount * CpuStatus->MaxThreadCount); - ASSERT (CpuFeaturesData->CpuFlags.PackageSemaphoreCount != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (CpuFeaturesData->CpuFlags.PackageSemaphoreCount == NULL) { + ASSERT (CpuFeaturesData->CpuFlags.PackageSemaphoreCount != NULL); + goto ExitOnError; + } + + // MU_CHANGE [END] - CodeQL change // // Initialize CpuFeaturesData->InitOrder[].CpuInfo.First @@ -257,7 +327,11 @@ CpuInitDataInitialize ( // Pages = EFI_SIZE_TO_PAGES (CpuStatus->PackageCount * sizeof (UINT32) + CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32)); FirstCore = AllocatePages (Pages); - ASSERT (FirstCore != NULL); + if (FirstCore == NULL) { + ASSERT (FirstCore != NULL); + goto ExitOnError; + } + FirstThread = FirstCore + CpuStatus->PackageCount; // @@ -317,6 +391,63 @@ CpuInitDataInitialize ( } FreePages (FirstCore, Pages); + + return; + + // MU_CHANGE [BEGIN] - CodeQL change +ExitOnError: + if (FirstCore != NULL) { + FreePages (FirstCore, Pages); + } + + if ((CpuFeaturesData != NULL) && (CpuFeaturesData->CpuFlags.PackageSemaphoreCount != NULL)) { + FreePool ((VOID *)CpuFeaturesData->CpuFlags.PackageSemaphoreCount); + CpuFeaturesData->CpuFlags.PackageSemaphoreCount = NULL; + } + + if ((CpuFeaturesData != NULL) && (CpuFeaturesData->CpuFlags.CoreSemaphoreCount != NULL)) { + FreePool ((VOID *)CpuFeaturesData->CpuFlags.CoreSemaphoreCount); + CpuFeaturesData->CpuFlags.CoreSemaphoreCount = NULL; + } + + if (ThreadCountPerCore != NULL) { + FreePages ( + ThreadCountPerCore, + EFI_SIZE_TO_PAGES (sizeof (UINT8) * CpuStatus->PackageCount * CpuStatus->MaxCoreCount) + ); + } + + if (ThreadCountPerPackage != NULL) { + FreePages ( + ThreadCountPerPackage, + EFI_SIZE_TO_PAGES (sizeof (UINT32) * CpuStatus->PackageCount) + ); + } + + if (InitOrder != NULL) { + for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { + InitOrder = &CpuFeaturesData->InitOrder[ProcessorNumber]; + if (InitOrder->FeaturesSupportedMask != NULL) { + FreePool (InitOrder->FeaturesSupportedMask); + InitOrder->FeaturesSupportedMask = NULL; + } + } + } + + if (Location != NULL) { + FreePages (Location, EFI_SIZE_TO_PAGES (sizeof (EFI_CPU_PHYSICAL_LOCATION) * NumberOfCpus)); + } + + if (CpuFeaturesData->InitOrder != NULL) { + FreePages (CpuFeaturesData->InitOrder, EFI_SIZE_TO_PAGES (sizeof (CPU_FEATURES_INIT_ORDER) * NumberOfCpus)); + CpuFeaturesData->InitOrder = NULL; + } + + if (CpuStatus != NULL) { + CopyMem (CpuStatus, &CpuStatusBackupBuffer, sizeof (*CpuStatus)); + } + + // MU_CHANGE [END] - CodeQL change } /** diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c index 0285aaf5c9..6076d8917e 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c @@ -966,6 +966,8 @@ RegisterCpuFeature ( Return ACPI_CPU_DATA data. @return Pointer to ACPI_CPU_DATA data. + NULL if the ACPI CPU data structure cannot be allocated. // MU_CHANGE - CodeQL change + **/ ACPI_CPU_DATA * GetAcpiCpuData ( @@ -984,7 +986,13 @@ GetAcpiCpuData ( AcpiCpuData = (ACPI_CPU_DATA *)(UINTN)PcdGet64 (PcdCpuS3DataAddress); if (AcpiCpuData == NULL) { AcpiCpuData = AllocatePages (EFI_SIZE_TO_PAGES (sizeof (ACPI_CPU_DATA))); - ASSERT (AcpiCpuData != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (AcpiCpuData == NULL) { + ASSERT (AcpiCpuData != NULL); + return NULL; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (AcpiCpuData, sizeof (ACPI_CPU_DATA)); // @@ -1006,7 +1014,15 @@ GetAcpiCpuData ( NumberOfCpus = AcpiCpuData->NumberOfCpus; TableSize = 2 * NumberOfCpus * sizeof (CPU_REGISTER_TABLE); RegisterTable = AllocatePages (EFI_SIZE_TO_PAGES (TableSize)); - ASSERT (RegisterTable != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (RegisterTable == NULL) { + // Leave the AcpiCpuData data buffer allocated since it was assigned to a dynamic PCD + // which could have invoked PCD set callbacks that may have cached the buffer. + ASSERT (RegisterTable != NULL); + return NULL; + } + + // MU_CHANGE [END] - CodeQL change for (Index = 0; Index < NumberOfCpus; Index++) { Status = GetProcessorInformation (Index, &ProcessorInfoBuffer); @@ -1111,7 +1127,14 @@ CpuRegisterTableWriteWorker ( CpuFeaturesData = GetCpuFeaturesData (); if (CpuFeaturesData->RegisterTable == NULL) { AcpiCpuData = GetAcpiCpuData (); - ASSERT ((AcpiCpuData != NULL) && (AcpiCpuData->CpuFeatureInitData.RegisterTable != 0)); + // MU_CHANGE [BEGIN] - CodeQL change + if (AcpiCpuData == NULL) { + ASSERT (AcpiCpuData != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change + ASSERT (AcpiCpuData->CpuFeatureInitData.RegisterTable != 0); CpuFeaturesData->RegisterTable = (CPU_REGISTER_TABLE *)(UINTN)AcpiCpuData->CpuFeatureInitData.RegisterTable; CpuFeaturesData->PreSmmRegisterTable = (CPU_REGISTER_TABLE *)(UINTN)AcpiCpuData->CpuFeatureInitData.PreSmmInitRegisterTable; } diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c index 2bc8239687..5a9b675dbc 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -1206,10 +1206,23 @@ AllocateTokenBuffer ( // Separate the Spin_lock and Proc_token because the alignment requires by Spin_Lock. // SpinLockBuffer = AllocatePool (SpinLockSize * TokenCountPerChunk); - ASSERT (SpinLockBuffer != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (SpinLockBuffer == NULL) { + ASSERT (SpinLockBuffer != NULL); + return NULL; + } + + // MU_CHANGE [END] - CodeQL change ProcTokens = AllocatePool (sizeof (PROCEDURE_TOKEN) * TokenCountPerChunk); - ASSERT (ProcTokens != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (ProcTokens == NULL) { + ASSERT (ProcTokens != NULL); + FreePool (SpinLockBuffer); + return NULL; + } + + // MU_CHANGE [END] - CodeQL change for (Index = 0; Index < TokenCountPerChunk; Index++) { SpinLock = (SPIN_LOCK *)(SpinLockBuffer + SpinLockSize * Index); diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c index 1b0b6673e1..ef4afa2305 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c @@ -827,7 +827,13 @@ GetSmiCommandPort ( Fadt = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *)EfiLocateFirstAcpiTable ( EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE ); - ASSERT (Fadt != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (Fadt == NULL) { + ASSERT (Fadt != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change mSmiCommandPort = Fadt->SmiCmd; DEBUG ((DEBUG_INFO, "mSmiCommandPort = %x\n", mSmiCommandPort)); diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c index 920b52d8d4..9f66323310 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c @@ -254,7 +254,13 @@ SetStaticPageTable ( PageMapLevel4Entry = (UINT64 *)((*PageMapLevel5Entry) & ~mAddressEncMask & gPhyMask); if (PageMapLevel4Entry == NULL) { PageMapLevel4Entry = AllocatePageTableMemory (1); - ASSERT (PageMapLevel4Entry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (PageMapLevel4Entry == NULL) { + ASSERT (PageMapLevel4Entry != NULL); + continue; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (PageMapLevel4Entry, EFI_PAGES_TO_SIZE (1)); *PageMapLevel5Entry = (UINT64)(UINTN)PageMapLevel4Entry | mAddressEncMask | PAGE_ATTRIBUTE_BITS; @@ -268,7 +274,13 @@ SetStaticPageTable ( PageDirectoryPointerEntry = (UINT64 *)((*PageMapLevel4Entry) & ~mAddressEncMask & gPhyMask); if (PageDirectoryPointerEntry == NULL) { PageDirectoryPointerEntry = AllocatePageTableMemory (1); - ASSERT (PageDirectoryPointerEntry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (PageDirectoryPointerEntry == NULL) { + ASSERT (PageDirectoryPointerEntry != NULL); + continue; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (PageDirectoryPointerEntry, EFI_PAGES_TO_SIZE (1)); *PageMapLevel4Entry = (UINT64)(UINTN)PageDirectoryPointerEntry | mAddressEncMask | PAGE_ATTRIBUTE_BITS; @@ -306,7 +318,13 @@ SetStaticPageTable ( PageDirectoryEntry = (UINT64 *)((*PageDirectoryPointerEntry) & ~mAddressEncMask & gPhyMask); if (PageDirectoryEntry == NULL) { PageDirectoryEntry = AllocatePageTableMemory (1); - ASSERT (PageDirectoryEntry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (PageDirectoryEntry == NULL) { + ASSERT (PageDirectoryEntry != NULL); + continue; + } + + // MU_CHANGE [END] - CodeQL change ZeroMem (PageDirectoryEntry, EFI_PAGES_TO_SIZE (1)); // @@ -331,6 +349,7 @@ SetStaticPageTable ( Create PageTable for SMM use. @return The address of PML4 (to set CR3). + Zero if any error occurs. // MU_CHANGE - CodeQL change **/ UINT32 @@ -348,6 +367,9 @@ SmmInitPageTable ( UINT64 *Pml4Entry; UINT64 *Pml5Entry; + Pml4Entry = NULL; // MU_CHANGE - CodeQL change + Pml5Entry = NULL; // MU_CHANGE - CodeQL change + // // Initialize spin lock // @@ -379,7 +401,13 @@ SmmInitPageTable ( // Fill Page-Table-Level4 (PML4) entry // Pml4Entry = (UINT64 *)AllocatePageTableMemory (1); - ASSERT (Pml4Entry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (Pml4Entry == NULL) { + ASSERT (Pml4Entry != NULL); + return 0; + } + + // MU_CHANGE [END] - CodeQL change *Pml4Entry = Pages | mAddressEncMask | PAGE_ATTRIBUTE_BITS; ZeroMem (Pml4Entry + 1, EFI_PAGE_SIZE - sizeof (*Pml4Entry)); @@ -394,7 +422,14 @@ SmmInitPageTable ( // Fill PML5 entry // Pml5Entry = (UINT64 *)AllocatePageTableMemory (1); - ASSERT (Pml5Entry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (Pml5Entry == NULL) { + ASSERT (Pml5Entry != NULL); + FreePages (Pml4Entry, 1); + return 0; + } + + // MU_CHANGE [END] - CodeQL change *Pml5Entry = (UINTN)Pml4Entry | mAddressEncMask | PAGE_ATTRIBUTE_BITS; ZeroMem (Pml5Entry + 1, EFI_PAGE_SIZE - sizeof (*Pml5Entry)); // @@ -415,7 +450,18 @@ SmmInitPageTable ( // Add pages to page pool // FreePage = (LIST_ENTRY *)AllocatePageTableMemory (PAGE_TABLE_PAGES); - ASSERT (FreePage != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (FreePage == NULL) { + FreePages (Pml4Entry, 1); + if (Pml5Entry != NULL) { + FreePages (Pml5Entry, 1); + } + + ASSERT (FreePage != NULL); + return 0; + } + + // MU_CHANGE [END] - CodeQL change for (Index = 0; Index < PAGE_TABLE_PAGES; Index++) { InsertTailList (&mPagePool, FreePage); FreePage += EFI_PAGE_SIZE / sizeof (*FreePage); diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c index cb7a691745..2ee3799084 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c @@ -47,7 +47,13 @@ InitSmmS3Cr3 ( // Fill Page-Table-Level4 (PML4) entry // PTEntry = (UINT64 *)AllocatePageTableMemory (1); - ASSERT (PTEntry != NULL); + // MU_CHANGE [BEGIN] - CodeQL change + if (PTEntry == NULL) { + ASSERT (PTEntry != NULL); + return; + } + + // MU_CHANGE [END] - CodeQL change *PTEntry = Pages | mAddressEncMask | PAGE_ATTRIBUTE_BITS; ZeroMem (PTEntry + 1, EFI_PAGE_SIZE - sizeof (*PTEntry));