VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/Tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Tests.c')
-rw-r--r--src/Common/Tests.c41
1 files changed, 34 insertions, 7 deletions
diff --git a/src/Common/Tests.c b/src/Common/Tests.c
index cf30e4a1..77a7aa2e 100644
--- a/src/Common/Tests.c
+++ b/src/Common/Tests.c
@@ -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;
}