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:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user