From 74f2e090cfd9f9f1fab8d5ef820525b8f7aa6033 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 14 Jan 2008 11:15:35 -0800 Subject: [PATCH] Fix race condition in loading default provider --- dlls/crypt32/main.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/crypt32/main.c b/dlls/crypt32/main.c index fa90ee0..922dd19 100644 --- a/dlls/crypt32/main.c +++ b/dlls/crypt32/main.c @@ -59,8 +59,16 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, HCRYPTPROV CRYPT_GetDefaultProvider(void) { if (!hDefProv) - CryptAcquireContextW(&hDefProv, NULL, MS_ENHANCED_PROV_W, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + { + HCRYPTPROV prov; + + CryptAcquireContextW(&prov, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT); + InterlockedCompareExchangePointer((PVOID *)&hDefProv, (PVOID)prov, + NULL); + if (hDefProv != prov) + CryptReleaseContext(prov, 0); + } return hDefProv; } -- 1.4.1