1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-12 11:28:26 -06:00

Windows: correctly handle SEH exceptions during self-tests in order to disable CPU extended features in such case.

This commit is contained in:
Mounir IDRASSI
2017-07-04 11:19:53 +02:00
parent 0358eb6c71
commit 88cc8a00f4
6 changed files with 91 additions and 54 deletions

View File

@@ -1156,20 +1156,20 @@ static BOOL HwEncryptionDisabled = FALSE;
BOOL IsAesHwCpuSupported ()
{
#ifdef TC_WINDOWS_BOOT_AES
static BOOL state = FALSE;
static BOOL stateValid = FALSE;
if (!stateValid)
{
#ifdef TC_WINDOWS_BOOT_AES
state = is_aes_hw_cpu_supported() ? TRUE : FALSE;
#else
state = g_hasAESNI ? TRUE : FALSE;
#endif
stateValid = TRUE;
}
return state && !HwEncryptionDisabled;
#else
return (HasAESNI() && !HwEncryptionDisabled)? TRUE : FALSE;
#endif
}
void EnableHwEncryption (BOOL enable)

View File

@@ -1355,18 +1355,45 @@ BOOL AutoTestAlgorithms (void)
{
BOOL result = TRUE;
BOOL hwEncryptionEnabled = IsHwEncryptionEnabled();
#if defined (_MSC_VER) && !defined (_UEFI)
BOOL exceptionCatched = FALSE;
__try
{
#endif
EnableHwEncryption (FALSE);
EnableHwEncryption (FALSE);
if (!DoAutoTestAlgorithms())
result = FALSE;
if (!DoAutoTestAlgorithms())
result = FALSE;
EnableHwEncryption (TRUE);
EnableHwEncryption (TRUE);
if (!DoAutoTestAlgorithms())
result = FALSE;
if (!DoAutoTestAlgorithms())
result = FALSE;
EnableHwEncryption (hwEncryptionEnabled);
#if defined (_MSC_VER) && !defined (_UEFI)
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
exceptionCatched = TRUE;
}
EnableHwEncryption (hwEncryptionEnabled);
if (exceptionCatched)
{
/* unexepected exception raised. Disable all CPU extended feature and try again */
EnableHwEncryption (hwEncryptionEnabled);
DisableCPUExtendedFeatures ();
__try
{
result = DoAutoTestAlgorithms();
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
/* exception still occuring. Report failure. */
result = FALSE;
}
}
#endif
return result;
}