From 2375a653fe3cd0ed5ce51672ff07a41ef4a4862d Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Mon, 11 Aug 2025 20:59:00 +0200 Subject: [PATCH] Resolve potential PDE conflict in non-PAE boot path --- xtldr/modules/xtos_o/i686/memory.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/xtldr/modules/xtos_o/i686/memory.c b/xtldr/modules/xtos_o/i686/memory.c index c001cfc..50f4194 100644 --- a/xtldr/modules/xtos_o/i686/memory.c +++ b/xtldr/modules/xtos_o/i686/memory.c @@ -88,8 +88,17 @@ XtpMapHardwareMemoryPool(IN PXTBL_PAGE_MAPPING PageMap) } else { - /* Make PDE valid (PAE disabled) */ + /* Get PDE base address (PAE disabled) */ LegacyPdeBase = (PHARDWARE_LEGACY_PTE)PageMap->PtePointer; + + /* Check for a conflicting PDE */ + if(LegacyPdeBase[MM_HARDWARE_VA_START >> MM_PDI_LEGACY_SHIFT].Valid) + { + /* PDE already exists and is valid, nothing to do */ + return STATUS_EFI_SUCCESS; + } + + /* Make PDE valid */ RtlZeroMemory(&LegacyPdeBase[MM_HARDWARE_VA_START >> MM_PDI_LEGACY_SHIFT], sizeof(HARDWARE_LEGACY_PTE)); LegacyPdeBase[MM_HARDWARE_VA_START >> MM_PDI_LEGACY_SHIFT].Valid = 1; LegacyPdeBase[MM_HARDWARE_VA_START >> MM_PDI_LEGACY_SHIFT].PageFrameNumber = Address >> MM_PAGE_SHIFT;