From 82cd149a6df56e48d6559ddd3dba225279d339e3 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Sat, 15 Apr 2017 22:12:44 -0700 Subject: [PATCH] fail fast on exceptions that indicate corrupted process state --- src/vm/exceptionhandling.cpp | 4 ++++ src/vm/i386/excepx86.cpp | 5 +++++ 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 31b85bdb0add..b98583e5d763 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 9680e8745db7..8c65db75a736 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 157643f70ce2..87683448a66c 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