--- truecrypt/boot/windows/bootmemory.cpp 2018/04/24 16:50:05 1.1 +++ truecrypt/boot/windows/bootmemory.cpp 2018/04/24 17:09:41 1.1.1.7 @@ -1,11 +1,12 @@ /* - Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. + Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved. - Governed by the TrueCrypt License 2.4 the full text of which is contained - in the file License.txt included in TrueCrypt binary and source code - distribution packages. + Governed by the TrueCrypt License 3.0 the full text of which is contained in + the file License.txt included in TrueCrypt binary and source code distribution + packages. */ +#include "BootDefs.h" #include "BootMemory.h" static uint32 MemoryMapContValue; @@ -22,6 +23,8 @@ static bool GetMemoryMapEntry (BiosMemor __asm { + push es + lea di, function TC_ASM_MOV_EAX_DI lea di, MemoryMapContValue @@ -33,9 +36,11 @@ static bool GetMemoryMapEntry (BiosMemor lea di, MemoryMapContValue TC_ASM_MOV_DI_ECX - lea di, entry - mov di, [entry] - + // Use alternative segment to prevent memory corruption caused by buggy BIOSes + push TC_BOOT_LOADER_ALT_SEGMENT + pop es + mov di, 0 + int 0x15 jnc no_carry mov carry, true @@ -47,8 +52,12 @@ static bool GetMemoryMapEntry (BiosMemor TC_ASM_MOV_DI_EBX lea di, resultSize TC_ASM_MOV_DI_ECX + + pop es } + CopyMemory (TC_BOOT_LOADER_ALT_SEGMENT, 0, &entry, sizeof (entry)); + // BIOS may set CF at the end of the list if (carry) MemoryMapContValue = 0;