From a0b2d53d29420723ee2b3d1360a2b2e071f1c44c Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Sun, 5 May 2024 14:01:23 -0700 Subject: [PATCH 01/11] use APC2 on arm64 --- src/coreclr/clrdefinitions.cmake | 2 +- .../vm/amd64/RedirectedHandledJITCase.asm | 3 +- src/coreclr/vm/arm64/asmconstants.h | 3 ++ src/coreclr/vm/arm64/asmhelpers.asm | 34 +++++++++++++++++++ src/coreclr/vm/threads.cpp | 2 ++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake index 1970b6c33c7544..5dc10ae36570fb 100644 --- a/src/coreclr/clrdefinitions.cmake +++ b/src/coreclr/clrdefinitions.cmake @@ -223,7 +223,7 @@ if (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) add_compile_definitions($<$>>:FEATURE_EH_FUNCLETS>) endif (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) -if (CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64) +if (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64)) add_definitions(-DFEATURE_SPECIAL_USER_MODE_APC) endif() diff --git a/src/coreclr/vm/amd64/RedirectedHandledJITCase.asm b/src/coreclr/vm/amd64/RedirectedHandledJITCase.asm index 61146cc6fbe59e..4aeb705922ab3c 100644 --- a/src/coreclr/vm/amd64/RedirectedHandledJITCase.asm +++ b/src/coreclr/vm/amd64/RedirectedHandledJITCase.asm @@ -217,7 +217,8 @@ NESTED_ENTRY ApcActivationCallbackStub, _TEXT, FixRedirectContextHandler .errnz REDIRECTSTUB_ESTABLISHER_OFFSET_RBP, REDIRECTSTUB_ESTABLISHER_OFFSET_RBP has changed - update asm stubs END_PROLOGUE - ; Save the pointer to the interrupted context on the stack for the stack walker + ; Save a copy of the redirect CONTEXT*. + ; This is needed for the debugger to unwind the stack. mov rax, [rcx + OFFSETOF__APC_CALLBACK_DATA__ContextRecord] mov [rbp + 20h], rax .errnz REDIRECTSTUB_RBP_OFFSET_CONTEXT - 20h, REDIRECTSTUB_RBP_OFFSET_CONTEXT has changed - update asm stubs diff --git a/src/coreclr/vm/arm64/asmconstants.h b/src/coreclr/vm/arm64/asmconstants.h index 262fa6860df73f..c002916963f421 100644 --- a/src/coreclr/vm/arm64/asmconstants.h +++ b/src/coreclr/vm/arm64/asmconstants.h @@ -157,6 +157,9 @@ ASMCONSTANTS_C_ASSERT(UnmanagedToManagedFrame__m_pvDatum == offsetof(UnmanagedTo #endif // FEATURE_COMINTEROP +#ifdef FEATURE_SPECIAL_USER_MODE_APC +#define OFFSETOF__APC_CALLBACK_DATA__ContextRecord 0x8 +#endif #define REDIRECTSTUB_SP_OFFSET_CONTEXT 0 diff --git a/src/coreclr/vm/arm64/asmhelpers.asm b/src/coreclr/vm/arm64/asmhelpers.asm index bc88d15ee330fb..ec28879607187b 100644 --- a/src/coreclr/vm/arm64/asmhelpers.asm +++ b/src/coreclr/vm/arm64/asmhelpers.asm @@ -1174,5 +1174,39 @@ __HelperNakedFuncName SETS "$helper":CC:"Naked" br x9 LEAF_END +#ifdef FEATURE_SPECIAL_USER_MODE_APC + + IMPORT |?ApcActivationCallback@Thread@@CAX_K@Z| + + ; extern "C" void NTAPI ApcActivationCallbackStub(ULONG_PTR Parameter); + NESTED_ENTRY ApcActivationCallbackStub + + PROLOG_SAVE_REG_PAIR fp, lr, #-16! + PROLOG_STACK_ALLOC 16 ; stack slot for CONTEXT* and padding + + ;REDIRECTSTUB_SP_OFFSET_CONTEXT is defined in asmconstants.h and is used in GetCONTEXTFromRedirectedStubStackFrame + ;If CONTEXT is not saved at 0 offset from SP it must be changed as well. + ASSERT REDIRECTSTUB_SP_OFFSET_CONTEXT == 0 + + ; Save a copy of the redirect CONTEXT*. + ; This is needed for the debugger to unwind the stack. + ldr x17, [x0, OFFSETOF__APC_CALLBACK_DATA__ContextRecord] + str x17, [sp] + + bl |?ApcActivationCallback@Thread@@CAX_K@Z| + + EPILOG_STACK_FREE 16 ; undo stack slot for CONTEXT* and padding + EPILOG_RESTORE_REG_PAIR fp, lr, #16! + EPILOG_RETURN + +; Put a label here to tell the debugger where the end of this function is. + PATCH_LABEL ApcActivationCallbackStubEnd + EXPORT ApcActivationCallbackStubEnd + + NESTED_END + +#endif ; FEATURE_SPECIAL_USER_MODE_APC + + ; Must be at very end of file END diff --git a/src/coreclr/vm/threads.cpp b/src/coreclr/vm/threads.cpp index e9e2409dde0c7b..369f8637beafcb 100644 --- a/src/coreclr/vm/threads.cpp +++ b/src/coreclr/vm/threads.cpp @@ -8198,9 +8198,11 @@ void Thread::StaticInitialize() #ifdef FEATURE_SPECIAL_USER_MODE_APC InitializeSpecialUserModeApc(); +#if defined(TARGET_AMD64) // When CET shadow stacks are enabled, support for special user-mode APCs with the necessary functionality is required _ASSERTE_ALL_BUILDS(!AreCetShadowStacksEnabled() || UseSpecialUserModeApc()); #endif +#endif } #ifdef FEATURE_SPECIAL_USER_MODE_APC From b029f3e9882059ed89ae72bb8f1d793c45d3a92f Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Mon, 6 May 2024 16:07:22 -0700 Subject: [PATCH 02/11] Made AreCetShadowStacksEnabled available on arm64, with trivial implementation for now. --- src/coreclr/vm/threads.cpp | 2 -- src/coreclr/vm/threads.h | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/coreclr/vm/threads.cpp b/src/coreclr/vm/threads.cpp index 369f8637beafcb..e9e2409dde0c7b 100644 --- a/src/coreclr/vm/threads.cpp +++ b/src/coreclr/vm/threads.cpp @@ -8198,11 +8198,9 @@ void Thread::StaticInitialize() #ifdef FEATURE_SPECIAL_USER_MODE_APC InitializeSpecialUserModeApc(); -#if defined(TARGET_AMD64) // When CET shadow stacks are enabled, support for special user-mode APCs with the necessary functionality is required _ASSERTE_ALL_BUILDS(!AreCetShadowStacksEnabled() || UseSpecialUserModeApc()); #endif -#endif } #ifdef FEATURE_SPECIAL_USER_MODE_APC diff --git a/src/coreclr/vm/threads.h b/src/coreclr/vm/threads.h index 67c4b6b83c975b..7dcc6ea51d9931 100644 --- a/src/coreclr/vm/threads.h +++ b/src/coreclr/vm/threads.h @@ -4017,15 +4017,19 @@ class Thread public: static void StaticInitialize(); -#if defined(TARGET_AMD64) && defined(TARGET_WINDOWS) +#if defined(TARGET_WINDOWS) static bool AreCetShadowStacksEnabled() { LIMITED_METHOD_CONTRACT; +#if defined(TARGET_AMD64) // The SSP is null when CET shadow stacks are not enabled. On processors that don't support shadow stacks, this is a // no-op and the intrinsic returns 0. CET shadow stacks are enabled or disabled for all threads, so the result is the // same from any thread. return _rdsspq() != 0; +#else + return false; +#endif } #endif From 30c7cf62b995b27118bb182da80fa4c7f0a018b9 Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Tue, 7 May 2024 14:24:19 -0700 Subject: [PATCH 03/11] Enabled querying for GetReturnAddressHijackTarget on arm64 --- src/coreclr/vm/threads.h | 1 + src/coreclr/vm/threadsuspend.cpp | 9 ++++----- src/coreclr/vm/threadsuspend.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/coreclr/vm/threads.h b/src/coreclr/vm/threads.h index 7dcc6ea51d9931..0fe7cbb1cf4dea 100644 --- a/src/coreclr/vm/threads.h +++ b/src/coreclr/vm/threads.h @@ -4028,6 +4028,7 @@ class Thread // same from any thread. return _rdsspq() != 0; #else + // When implementing AreCetShadowStacksEnabled() on other architectures, review all the places where this is used. return false; #endif } diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index f79193888480d8..bb82cb8214d2e9 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -25,7 +25,7 @@ CLREvent* ThreadSuspend::g_pGCSuspendEvent = NULL; ThreadSuspend::SUSPEND_REASON ThreadSuspend::m_suspendReason; -#if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) +#if defined(TARGET_WINDOWS) void* ThreadSuspend::g_returnAddressHijackTarget = NULL; #endif @@ -4747,7 +4747,7 @@ void Thread::HijackThread(ReturnKind returnKind, ExecutionState *esb) VOID *pvHijackAddr = reinterpret_cast(OnHijackTripThread); -#if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) +#if defined(TARGET_WINDOWS) void* returnAddressHijackTarget = ThreadSuspend::GetReturnAddressHijackTarget(); if (returnAddressHijackTarget != NULL) { @@ -6062,9 +6062,8 @@ void ThreadSuspend::Initialize() #ifdef FEATURE_HIJACK #if defined(TARGET_UNIX) ::PAL_SetActivationFunction(HandleSuspensionForInterruptedThread, CheckActivationSafePoint); -#elif defined(TARGET_WINDOWS) && defined(TARGET_AMD64) - // Only versions of Windows that have the special user mode APC have a correct implementation of the return address hijack handling - if (Thread::UseSpecialUserModeApc()) +#elif defined(TARGET_WINDOWS) + if (Thread::AreCetShadowStacksEnabled()) { HMODULE hModNtdll = WszLoadLibrary(W("ntdll.dll")); if (hModNtdll != NULL) diff --git a/src/coreclr/vm/threadsuspend.h b/src/coreclr/vm/threadsuspend.h index 6d034b91a1997a..910164232b4cf2 100644 --- a/src/coreclr/vm/threadsuspend.h +++ b/src/coreclr/vm/threadsuspend.h @@ -194,7 +194,7 @@ class ThreadSuspend private: static CLREvent * g_pGCSuspendEvent; -#if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) +#if defined(TARGET_WINDOWS) static void* g_returnAddressHijackTarget; #endif // TARGET_WINDOWS && TARGET_AMD64 @@ -251,7 +251,7 @@ class ThreadSuspend return g_pSuspensionThread; } -#if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) +#if defined(TARGET_WINDOWS) static void* GetReturnAddressHijackTarget() { return g_returnAddressHijackTarget; From 7bb78c46688a66459f6f3495097e79fd127d58e6 Mon Sep 17 00:00:00 2001 From: Vladimir Sadov Date: Tue, 7 May 2024 14:50:51 -0700 Subject: [PATCH 04/11] Apply suggestions from code review Co-authored-by: Jan Kotas --- src/coreclr/vm/threadsuspend.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/threadsuspend.h b/src/coreclr/vm/threadsuspend.h index 910164232b4cf2..9eab3cef718af2 100644 --- a/src/coreclr/vm/threadsuspend.h +++ b/src/coreclr/vm/threadsuspend.h @@ -196,7 +196,7 @@ class ThreadSuspend #if defined(TARGET_WINDOWS) static void* g_returnAddressHijackTarget; -#endif // TARGET_WINDOWS && TARGET_AMD64 +#endif // TARGET_WINDOWS // This is true iff we're currently in the process of suspending threads. Once the // threads have been suspended, this is false. This is set via an instance of From 687c1f55c2f9164d0d5e1137048206ed391b70bb Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Tue, 7 May 2024 14:52:41 -0700 Subject: [PATCH 05/11] updated #endif --- src/coreclr/vm/threadsuspend.cpp | 4 ++-- src/coreclr/vm/threadsuspend.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index bb82cb8214d2e9..4a4b824adc087a 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -4753,7 +4753,7 @@ void Thread::HijackThread(ReturnKind returnKind, ExecutionState *esb) { pvHijackAddr = returnAddressHijackTarget; } -#endif // TARGET_WINDOWS && TARGET_AMD64 +#endif // TARGET_WINDOWS #ifdef TARGET_X86 if (returnKind == RT_Float) @@ -6076,7 +6076,7 @@ void ThreadSuspend::Initialize() } } } -#endif // TARGET_WINDOWS && TARGET_AMD64 +#endif // TARGET_WINDOWS #endif // FEATURE_HIJACK } diff --git a/src/coreclr/vm/threadsuspend.h b/src/coreclr/vm/threadsuspend.h index 9eab3cef718af2..e1114badf6d065 100644 --- a/src/coreclr/vm/threadsuspend.h +++ b/src/coreclr/vm/threadsuspend.h @@ -256,7 +256,7 @@ class ThreadSuspend { return g_returnAddressHijackTarget; } -#endif // TARGET_WINDOWS && TARGET_AMD64 +#endif // TARGET_WINDOWS private: static LONG m_DebugWillSyncCount; From 6d41c75ac8869bf75d1275f1f7f5d92be1b8293a Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Tue, 7 May 2024 17:46:20 -0700 Subject: [PATCH 06/11] not handling STATUS_RETURN_ADDRESS_HIJACK_ATTEMPT if not in coop mode. --- src/coreclr/vm/excep.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp index dcc5442c40a8f7..34b4d697ccaf64 100644 --- a/src/coreclr/vm/excep.cpp +++ b/src/coreclr/vm/excep.cpp @@ -6767,6 +6767,13 @@ VEH_ACTION WINAPI CLRVectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo if (pExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_RETURN_ADDRESS_HIJACK_ATTEMPT) { + if (pThread == NULL || !pThread->PreemptiveGCDisabled()) + { + // We are not running managed code, so this cannot be our hijack + // Perhaps some other runtime is responsible. + return VEH_CONTINUE_SEARCH; + } + HijackArgs hijackArgs; hijackArgs.Rax = pExceptionInfo->ContextRecord->Rax; hijackArgs.Rsp = pExceptionInfo->ContextRecord->Rsp; From 8691cb25cbb7fd2ab87c641e9011a49e37c59f2f Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Tue, 7 May 2024 19:46:55 -0700 Subject: [PATCH 07/11] Assert that a hijack target is provided when CET is enabled --- src/coreclr/vm/threadsuspend.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index 4a4b824adc087a..47f4fe46a4d328 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -6074,6 +6074,11 @@ void ThreadSuspend::Initialize() { g_returnAddressHijackTarget = (void*)pfnRtlGetReturnAddressHijackTarget(); } + + if (g_returnAddressHijackTarget == NULL) + { + _ASSERTE_ALL_BUILDS(!"RtlGetReturnAddressHijackTarget must provide a target when both FEATURE_HIJACK and CET are enabled"); + } } } #endif // TARGET_WINDOWS From 6d2b1ed632a9f4d40074858897d09739c8c8b5c3 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Tue, 7 May 2024 21:14:35 -0700 Subject: [PATCH 08/11] Nit --- src/coreclr/vm/threadsuspend.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index 47f4fe46a4d328..c11471e3facd24 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -6068,17 +6068,11 @@ void ThreadSuspend::Initialize() HMODULE hModNtdll = WszLoadLibrary(W("ntdll.dll")); if (hModNtdll != NULL) { - typedef ULONG_PTR (NTAPI *PFN_RtlGetReturnAddressHijackTarget)(); - PFN_RtlGetReturnAddressHijackTarget pfnRtlGetReturnAddressHijackTarget = (PFN_RtlGetReturnAddressHijackTarget)GetProcAddress(hModNtdll, "RtlGetReturnAddressHijackTarget"); - if (pfnRtlGetReturnAddressHijackTarget != NULL) - { - g_returnAddressHijackTarget = (void*)pfnRtlGetReturnAddressHijackTarget(); - } - - if (g_returnAddressHijackTarget == NULL) - { - _ASSERTE_ALL_BUILDS(!"RtlGetReturnAddressHijackTarget must provide a target when both FEATURE_HIJACK and CET are enabled"); - } + g_returnAddressHijackTarget = (void*)GetProcAddress(hModNtdll, "RtlGetReturnAddressHijackTarget"); + } + if (g_returnAddressHijackTarget == NULL) + { + _ASSERTE_ALL_BUILDS(!"RtlGetReturnAddressHijackTarget must provide a target when both FEATURE_HIJACK and CET are enabled"); } } #endif // TARGET_WINDOWS From 7be5dbe33f71ba297130dbc08fee802f711a217c Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Tue, 7 May 2024 21:18:30 -0700 Subject: [PATCH 09/11] AreCetShadowStacksEnabled -> AreShadowStacksEnabled --- src/coreclr/debug/ee/debugger.cpp | 2 +- src/coreclr/vm/excep.cpp | 6 +++--- src/coreclr/vm/jithelpers.cpp | 4 ++-- src/coreclr/vm/threads.cpp | 2 +- src/coreclr/vm/threads.h | 4 ++-- src/coreclr/vm/threadsuspend.cpp | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/coreclr/debug/ee/debugger.cpp b/src/coreclr/debug/ee/debugger.cpp index 3723ab2c90354e..d4a9cde7de04a9 100644 --- a/src/coreclr/debug/ee/debugger.cpp +++ b/src/coreclr/debug/ee/debugger.cpp @@ -971,7 +971,7 @@ Debugger::Debugger() m_mdDataStructureVersion = 1; m_fOutOfProcessSetContextEnabled = #if defined(OUT_OF_PROCESS_SETTHREADCONTEXT) && !defined(DACCESS_COMPILE) - Thread::AreCetShadowStacksEnabled() || CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_OutOfProcessSetContext) != 0; + Thread::AreShadowStacksEnabled() || CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_OutOfProcessSetContext) != 0; #else FALSE; #endif diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp index 34b4d697ccaf64..a12a4c0ce3853e 100644 --- a/src/coreclr/vm/excep.cpp +++ b/src/coreclr/vm/excep.cpp @@ -6778,8 +6778,8 @@ VEH_ACTION WINAPI CLRVectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo hijackArgs.Rax = pExceptionInfo->ContextRecord->Rax; hijackArgs.Rsp = pExceptionInfo->ContextRecord->Rsp; - bool areCetShadowStacksEnabled = Thread::AreCetShadowStacksEnabled(); - if (areCetShadowStacksEnabled) + bool areShadowStacksEnabled = Thread::AreShadowStacksEnabled(); + if (areShadowStacksEnabled) { // When the CET is enabled, the return address is still on stack, so we need to set the Rsp as // if it was popped. @@ -6797,7 +6797,7 @@ VEH_ACTION WINAPI CLRVectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo #undef CALLEE_SAVED_REGISTER pExceptionInfo->ContextRecord->Rax = hijackArgs.Rax; - if (areCetShadowStacksEnabled) + if (areShadowStacksEnabled) { // The context refers to the return instruction // Set the return address on the stack to the original one diff --git a/src/coreclr/vm/jithelpers.cpp b/src/coreclr/vm/jithelpers.cpp index 05d2ad18b5bd94..6adaec8643f903 100644 --- a/src/coreclr/vm/jithelpers.cpp +++ b/src/coreclr/vm/jithelpers.cpp @@ -5282,7 +5282,7 @@ void JIT_Patchpoint(int* counter, int ilOffset) DWORD contextSize = 0; ULONG64 xStateCompactionMask = 0; DWORD contextFlags = CONTEXT_FULL; - if (Thread::AreCetShadowStacksEnabled()) + if (Thread::AreShadowStacksEnabled()) { xStateCompactionMask = XSTATE_MASK_CET_U; contextFlags |= CONTEXT_XSTATE; @@ -5310,7 +5310,7 @@ void JIT_Patchpoint(int* counter, int ilOffset) RtlCaptureContext(pFrameContext); #if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) - if (Thread::AreCetShadowStacksEnabled()) + if (Thread::AreShadowStacksEnabled()) { pFrameContext->ContextFlags |= CONTEXT_XSTATE; SetXStateFeaturesMask(pFrameContext, xStateCompactionMask); diff --git a/src/coreclr/vm/threads.cpp b/src/coreclr/vm/threads.cpp index e9e2409dde0c7b..294ed11a981663 100644 --- a/src/coreclr/vm/threads.cpp +++ b/src/coreclr/vm/threads.cpp @@ -8199,7 +8199,7 @@ void Thread::StaticInitialize() InitializeSpecialUserModeApc(); // When CET shadow stacks are enabled, support for special user-mode APCs with the necessary functionality is required - _ASSERTE_ALL_BUILDS(!AreCetShadowStacksEnabled() || UseSpecialUserModeApc()); + _ASSERTE_ALL_BUILDS(!AreShadowStacksEnabled() || UseSpecialUserModeApc()); #endif } diff --git a/src/coreclr/vm/threads.h b/src/coreclr/vm/threads.h index 0fe7cbb1cf4dea..982fdf956d2867 100644 --- a/src/coreclr/vm/threads.h +++ b/src/coreclr/vm/threads.h @@ -4018,7 +4018,7 @@ class Thread static void StaticInitialize(); #if defined(TARGET_WINDOWS) - static bool AreCetShadowStacksEnabled() + static bool AreShadowStacksEnabled() { LIMITED_METHOD_CONTRACT; @@ -4028,7 +4028,7 @@ class Thread // same from any thread. return _rdsspq() != 0; #else - // When implementing AreCetShadowStacksEnabled() on other architectures, review all the places where this is used. + // When implementing AreShadowStacksEnabled() on other architectures, review all the places where this is used. return false; #endif } diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index c11471e3facd24..751fd26028e913 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -6063,7 +6063,7 @@ void ThreadSuspend::Initialize() #if defined(TARGET_UNIX) ::PAL_SetActivationFunction(HandleSuspensionForInterruptedThread, CheckActivationSafePoint); #elif defined(TARGET_WINDOWS) - if (Thread::AreCetShadowStacksEnabled()) + if (Thread::AreShadowStacksEnabled()) { HMODULE hModNtdll = WszLoadLibrary(W("ntdll.dll")); if (hModNtdll != NULL) From 18c74f956e7f1a4924bd403e6c43c024e6bfa420 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Tue, 7 May 2024 21:21:35 -0700 Subject: [PATCH 10/11] Update src/coreclr/vm/threadsuspend.cpp --- src/coreclr/vm/threadsuspend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/threadsuspend.cpp b/src/coreclr/vm/threadsuspend.cpp index 751fd26028e913..bf449aad984fb2 100644 --- a/src/coreclr/vm/threadsuspend.cpp +++ b/src/coreclr/vm/threadsuspend.cpp @@ -6072,7 +6072,7 @@ void ThreadSuspend::Initialize() } if (g_returnAddressHijackTarget == NULL) { - _ASSERTE_ALL_BUILDS(!"RtlGetReturnAddressHijackTarget must provide a target when both FEATURE_HIJACK and CET are enabled"); + _ASSERTE_ALL_BUILDS(!"RtlGetReturnAddressHijackTarget must provide a target when shadow stacks are enabled"); } } #endif // TARGET_WINDOWS From 46f9962945a8f5179c79151fc67b1e1c8b756725 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Tue, 7 May 2024 21:23:47 -0700 Subject: [PATCH 11/11] Update src/coreclr/vm/threads.cpp --- src/coreclr/vm/threads.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/threads.cpp b/src/coreclr/vm/threads.cpp index 294ed11a981663..31d73aa6f0f607 100644 --- a/src/coreclr/vm/threads.cpp +++ b/src/coreclr/vm/threads.cpp @@ -8198,7 +8198,7 @@ void Thread::StaticInitialize() #ifdef FEATURE_SPECIAL_USER_MODE_APC InitializeSpecialUserModeApc(); - // When CET shadow stacks are enabled, support for special user-mode APCs with the necessary functionality is required + // When shadow stacks are enabled, support for special user-mode APCs with the necessary functionality is required _ASSERTE_ALL_BUILDS(!AreShadowStacksEnabled() || UseSpecialUserModeApc()); #endif }