From 0b65092f2de43c03e9670a294e29770d206bf3d1 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Fri, 2 Sep 2022 19:41:33 -0700 Subject: [PATCH 1/2] Fix W^X flag for setting ITypeInfo --- src/coreclr/vm/comcallablewrapper.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coreclr/vm/comcallablewrapper.cpp b/src/coreclr/vm/comcallablewrapper.cpp index b526383f755ea7..cd7b3abc9a2c6f 100644 --- a/src/coreclr/vm/comcallablewrapper.cpp +++ b/src/coreclr/vm/comcallablewrapper.cpp @@ -3851,6 +3851,7 @@ void ComMethodTable::SetITypeInfo(ITypeInfo *pNew) } CONTRACTL_END; + ExecutableWriterHolder comMTWriterHolder(this, sizeof(ComMethodTable)); if (InterlockedCompareExchangeT(&m_pITypeInfo, pNew, NULL) == NULL) { SafeAddRef(pNew); From d3d550546fd202f11064dd19553b2888e30eab1d Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Fri, 2 Sep 2022 19:47:56 -0700 Subject: [PATCH 2/2] Grab address from the holder. --- src/coreclr/vm/comcallablewrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/comcallablewrapper.cpp b/src/coreclr/vm/comcallablewrapper.cpp index cd7b3abc9a2c6f..e0c5c063ac26cb 100644 --- a/src/coreclr/vm/comcallablewrapper.cpp +++ b/src/coreclr/vm/comcallablewrapper.cpp @@ -3852,7 +3852,7 @@ void ComMethodTable::SetITypeInfo(ITypeInfo *pNew) CONTRACTL_END; ExecutableWriterHolder comMTWriterHolder(this, sizeof(ComMethodTable)); - if (InterlockedCompareExchangeT(&m_pITypeInfo, pNew, NULL) == NULL) + if (InterlockedCompareExchangeT(&comMTWriterHolder.GetRW()->m_pITypeInfo, pNew, NULL) == NULL) { SafeAddRef(pNew); }