summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahul Kumar <rahku@microsoft.com>2017-04-18 11:33:59 -0700
committerGitHub <noreply@github.com>2017-04-18 11:33:59 -0700
commit7ae6fbdc5a83cceb3a2cbd3bda204a95bcea1f0e (patch)
tree7fc01decc178c7ca15c711e3817ead1fafdb3235
parent98a41f0a8711e0d0f3cb0d56adc6f8d0c36c11d2 (diff)
downloadcoreclr-7ae6fbdc5a83cceb3a2cbd3bda204a95bcea1f0e.tar.gz
coreclr-7ae6fbdc5a83cceb3a2cbd3bda204a95bcea1f0e.tar.bz2
coreclr-7ae6fbdc5a83cceb3a2cbd3bda204a95bcea1f0e.zip
fail fast on exceptions that indicate corrupted process state (#10957)
-rw-r--r--src/vm/exceptionhandling.cpp4
-rw-r--r--src/vm/i386/excepx86.cpp5
-rw-r--r--tests/src/JIT/Directed/pinvoke/calli_excep.il4
3 files changed, 11 insertions, 2 deletions
diff --git a/src/vm/exceptionhandling.cpp b/src/vm/exceptionhandling.cpp
index ee0ff29c5e..15346fcfdd 100644
--- a/src/vm/exceptionhandling.cpp
+++ b/src/vm/exceptionhandling.cpp
@@ -1011,6 +1011,10 @@ ProcessCLRException(IN PEXCEPTION_RECORD pExceptionRecord
CEHelper::SetupCorruptionSeverityForActiveException((STState == ExceptionTracker::STS_FirstRethrowFrame), (pTracker->GetPreviousExceptionTracker() != NULL),
CEHelper::ShouldTreatActiveExceptionAsNonCorrupting());
}
+
+ // Failfast if exception indicates corrupted process state
+ if (pTracker->GetCorruptionSeverity() == ProcessCorrupting)
+ EEPOLICY_HANDLE_FATAL_ERROR(pExceptionRecord->ExceptionCode);
}
#endif // FEATURE_CORRUPTING_EXCEPTIONS
diff --git a/src/vm/i386/excepx86.cpp b/src/vm/i386/excepx86.cpp
index 9680e8745d..8c65db75a7 100644
--- a/src/vm/i386/excepx86.cpp
+++ b/src/vm/i386/excepx86.cpp
@@ -1088,6 +1088,11 @@ CPFH_RealFirstPassHandler( // ExceptionContinueSearch, etc.
// of the active exception.
CEHelper::SetupCorruptionSeverityForActiveException(bRethrownException, bNestedException,
CEHelper::ShouldTreatActiveExceptionAsNonCorrupting());
+
+ // Failfast if exception indicates corrupted process state
+ if (pExInfo->GetCorruptionSeverity() == ProcessCorrupting)
+ EEPOLICY_HANDLE_FATAL_ERROR(exceptionCode);
+
END_SO_INTOLERANT_CODE;
}
#endif // FEATURE_CORRUPTING_EXCEPTIONS
diff --git a/tests/src/JIT/Directed/pinvoke/calli_excep.il b/tests/src/JIT/Directed/pinvoke/calli_excep.il
index 157643f70c..87683448a6 100644
--- a/tests/src/JIT/Directed/pinvoke/calli_excep.il
+++ b/tests/src/JIT/Directed/pinvoke/calli_excep.il
@@ -33,7 +33,7 @@
int32 V_1)
.try
{
- ldc.i4 0xc0000005
+ ldc.i4 0xC0000017
ldc.i4.0
dup
dup
@@ -44,7 +44,7 @@
calli void (unsigned int32, unsigned int32, unsigned int32, native uint)
leave.s IL_001d
} // end .try
- catch [mscorlib]System.AccessViolationException
+ catch [mscorlib]System.OutOfMemoryException
{
IL_000f: stloc.0
IL_0010: ldloc.0