diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp index 2fe3fba668d368..8fde4b96c9884c 100644 --- a/src/coreclr/vm/excep.cpp +++ b/src/coreclr/vm/excep.cpp @@ -3567,8 +3567,14 @@ LONG WatsonLastChance( // EXCEPTION_CONTINUE_SEARCH, _CONTINUE_ #ifdef HOST_WINDOWS CreateCrashDumpIfEnabled(fSOException); #endif - RaiseFailFastException(pExceptionInfo == NULL ? NULL : pExceptionInfo->ExceptionRecord, - pExceptionInfo == NULL ? NULL : pExceptionInfo->ContextRecord, + // RaiseFailFastException validates that the context matches a valid return address on the stack as part of CET. + // If the return address is not valid, it rejects the context, flags it as a potential attack and asserts in + // checked builds of Windows OS. + // Avoid reporting thread context captured by EEPolicy::HandleFatalError since it has IP that does not + // match a valid return address on the stack. + bool fAvoidReportContextToRaiseFailFast = tore.IsFatalError(); + RaiseFailFastException(pExceptionInfo == NULL ? NULL : pExceptionInfo->ExceptionRecord, + pExceptionInfo == NULL || fAvoidReportContextToRaiseFailFast ? NULL : pExceptionInfo->ContextRecord, 0); STRESS_LOG0(LF_CORDB, LL_INFO10, "D::RFFE: Return from RaiseFailFastException\n"); }