From d34faf5e894262193eb1c75e8bfee3f3b6f6c9e9 Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Thu, 10 Jul 2025 17:29:32 -0400 Subject: [PATCH 1/2] Avoid reporting incorrect thread context to Watson --- src/coreclr/vm/excep.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp index 2fe3fba668d368..efaa0056f669d7 100644 --- a/src/coreclr/vm/excep.cpp +++ b/src/coreclr/vm/excep.cpp @@ -3567,8 +3567,9 @@ LONG WatsonLastChance( // EXCEPTION_CONTINUE_SEARCH, _CONTINUE_ #ifdef HOST_WINDOWS CreateCrashDumpIfEnabled(fSOException); #endif - RaiseFailFastException(pExceptionInfo == NULL ? NULL : pExceptionInfo->ExceptionRecord, - pExceptionInfo == NULL ? NULL : pExceptionInfo->ContextRecord, + bool fAvoidReportContextToRaiseFailFast = tore.IsFatalError(); // avoid reporting incorrect thread context to Watson + 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"); } From f6a7fc06cf7107b0270f5f614281fada2b80b406 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Sun, 13 Jul 2025 01:49:29 -0700 Subject: [PATCH 2/2] Update src/coreclr/vm/excep.cpp --- src/coreclr/vm/excep.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp index efaa0056f669d7..8fde4b96c9884c 100644 --- a/src/coreclr/vm/excep.cpp +++ b/src/coreclr/vm/excep.cpp @@ -3567,7 +3567,12 @@ LONG WatsonLastChance( // EXCEPTION_CONTINUE_SEARCH, _CONTINUE_ #ifdef HOST_WINDOWS CreateCrashDumpIfEnabled(fSOException); #endif - bool fAvoidReportContextToRaiseFailFast = tore.IsFatalError(); // avoid reporting incorrect thread context to Watson + // 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);