From 6f89a48349c0b16ce59378cbfa842823f38bbadf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 6 Nov 2021 18:43:35 +0100 Subject: [PATCH] [NTDLL:LDR] Fix process LoadConfig CS timeout conversion from ms to 100ns units (#4089) For more details, see https://forums.codeguru.com/showthread.php?370731-EnterCriticalSection-locking&p=1302399#post1302399 --- dll/ntdll/ldr/ldrinit.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/dll/ntdll/ldr/ldrinit.c b/dll/ntdll/ldr/ldrinit.c index ed9774fc0c2..d5a6b37d923 100644 --- a/dll/ntdll/ldr/ldrinit.c +++ b/dll/ntdll/ldr/ldrinit.c @@ -1839,7 +1839,7 @@ LdrpInitializeProcess(IN PCONTEXT Context, /* ReactOS specific: do not clear it. (Windows starts doing the same in later versions) */ //Peb->pShimData = NULL; - /* Save the number of processors and CS Timeout */ + /* Save the number of processors and CS timeout */ LdrpNumberOfProcessors = Peb->NumberOfProcessors; RtlpTimeout = Peb->CriticalSectionTimeout; @@ -1894,8 +1894,9 @@ LdrpInitializeProcess(IN PCONTEXT Context, if (VALID_CONFIG_FIELD(GlobalFlagsClear) && LoadConfig->GlobalFlagsClear) Peb->NtGlobalFlag &= ~LoadConfig->GlobalFlagsClear; + /* Convert the default CS timeout from milliseconds to 100ns units */ if (VALID_CONFIG_FIELD(CriticalSectionDefaultTimeout) && LoadConfig->CriticalSectionDefaultTimeout) - RtlpTimeout.QuadPart = Int32x32To64(LoadConfig->CriticalSectionDefaultTimeout, -10000000); + RtlpTimeout.QuadPart = Int32x32To64(LoadConfig->CriticalSectionDefaultTimeout, -10000); if (VALID_CONFIG_FIELD(DeCommitFreeBlockThreshold) && LoadConfig->DeCommitFreeBlockThreshold) HeapParameters.DeCommitFreeBlockThreshold = LoadConfig->DeCommitFreeBlockThreshold; @@ -1935,12 +1936,9 @@ LdrpInitializeProcess(IN PCONTEXT Context, &CommandLine); } - /* If the timeout is too long */ + /* If the CS timeout is longer than 1 hour, disable it */ if (RtlpTimeout.QuadPart < Int32x32To64(3600, -10000000)) - { - /* Then disable CS Timeout */ RtlpTimeoutDisable = TRUE; - } /* Initialize Critical Section Data */ RtlpInitDeferredCriticalSection();