diff options
author | Rahul Kumar <rahku@microsoft.com> | 2017-04-18 11:33:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-18 11:33:59 -0700 |
commit | 7ae6fbdc5a83cceb3a2cbd3bda204a95bcea1f0e (patch) | |
tree | 7fc01decc178c7ca15c711e3817ead1fafdb3235 | |
parent | 98a41f0a8711e0d0f3cb0d56adc6f8d0c36c11d2 (diff) | |
download | coreclr-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.cpp | 4 | ||||
-rw-r--r-- | src/vm/i386/excepx86.cpp | 5 | ||||
-rw-r--r-- | tests/src/JIT/Directed/pinvoke/calli_excep.il | 4 |
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 |