From ebcac449c7581e4400e4d785eddc1306eba366ad Mon Sep 17 00:00:00 2001 From: Florin9doi Date: Sat, 14 Sep 2019 17:02:39 +0300 Subject: [PATCH] Apply last patch's idea to LocalApicNMI as well and resolves an uninitialized read: ...... LocalApicNMI++; ApicTable->Length += LocalApicNMI->Length; ...... --- rEFIt_UEFI/Platform/AcpiPatcher.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/rEFIt_UEFI/Platform/AcpiPatcher.c b/rEFIt_UEFI/Platform/AcpiPatcher.c index 2ec2a5e20..c4545145f 100644 --- a/rEFIt_UEFI/Platform/AcpiPatcher.c +++ b/rEFIt_UEFI/Platform/AcpiPatcher.c @@ -1718,7 +1718,6 @@ EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, CHAR8 *OSVersion) BOOLEAN DsdtLoaded = FALSE; BOOLEAN NeedUpdate = FALSE; OPER_REGION *tmpRegion; - INTN ApicCPUBase = 0; CHAR16* AcpiOemPath = PoolPrint(L"%s\\ACPI\\patched", OEMPath); DbgHeader("PatchACPI"); @@ -2128,12 +2127,6 @@ EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, CHAR8 *OSVersion) ApicTable = (EFI_ACPI_DESCRIPTION_HEADER*)(UINTN)(*xf); // ApicLen = ApicTable->Length; ProcLocalApic = (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE *)(UINTN)(*xf + sizeof(EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER)); - //determine first ID of CPU. This must be 0 for Mac and for good Hack - // but = 1 for stupid ASUS - // - if (ProcLocalApic->Type == EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC) { - ApicCPUBase = ProcLocalApic->AcpiProcessorId; //we want first instance - } while ((ProcLocalApic->Type == EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC) && (ProcLocalApic->Length == 8)) { if (ProcLocalApic->Flags & EFI_ACPI_4_0_LOCAL_APIC_ENABLED) { @@ -2150,7 +2143,7 @@ EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, CHAR8 *OSVersion) ApicCPUNum = gCPUStructure.Threads; } - DBG("ApicCPUBase=%d ApicCPUNum=%d\n", ApicCPUBase, ApicCPUNum); + DBG("ApicCPUNum=%d\n", ApicCPUNum); //reallocate table if (gSettings.PatchNMI) { BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS; @@ -2198,11 +2191,11 @@ EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, CHAR8 *OSVersion) for (Index = 0; Index < ApicCPUNum; Index++) { LocalApicNMI->Type = EFI_ACPI_4_0_LOCAL_APIC_NMI; LocalApicNMI->Length = sizeof(EFI_ACPI_4_0_LOCAL_APIC_NMI_STRUCTURE); - LocalApicNMI->AcpiProcessorId = (UINT8)(ApicCPUBase + Index); + LocalApicNMI->AcpiProcessorId = acpi_cpu_processor_id[Index]; LocalApicNMI->Flags = 5; LocalApicNMI->LocalApicLint = 1; LocalApicNMI++; - ApicTable->Length += LocalApicNMI->Length; + ApicTable->Length += sizeof(EFI_ACPI_4_0_LOCAL_APIC_NMI_STRUCTURE); } DBG("ApicTable new Length=%d\n", ApicTable->Length); // insert corrected MADT