summaryrefslogtreecommitdiff
path: root/src/vm/clsload.cpp
diff options
context:
space:
mode:
authorMichal Strehovský <michals@microsoft.com>2017-11-02 21:58:31 +0100
committerMichal Strehovský <michals@microsoft.com>2017-11-02 21:58:31 +0100
commitfc7225790db730e411e98c7e74f5d979b4b224f1 (patch)
treeb38440f8f1bb0ae71c749dc0b2a0aee0e1ae4755 /src/vm/clsload.cpp
parent24f5c553ba96ece53fbc20cab0d7abe860f410bc (diff)
parent96f1a89a2bb007b7dbe5ccc613a0fa3f8dd323dd (diff)
downloadcoreclr-fc7225790db730e411e98c7e74f5d979b4b224f1.tar.gz
coreclr-fc7225790db730e411e98c7e74f5d979b4b224f1.tar.bz2
coreclr-fc7225790db730e411e98c7e74f5d979b4b224f1.zip
Merge branch 'master' into master-merge
Diffstat (limited to 'src/vm/clsload.cpp')
-rw-r--r--src/vm/clsload.cpp133
1 files changed, 20 insertions, 113 deletions
diff --git a/src/vm/clsload.cpp b/src/vm/clsload.cpp
index 22b030caa0..abf96d0425 100644
--- a/src/vm/clsload.cpp
+++ b/src/vm/clsload.cpp
@@ -4928,7 +4928,7 @@ BOOL AccessCheckOptions::DemandMemberAccess(AccessCheckContext *pContext, Method
if (m_fThrowIfTargetIsInaccessible)
{
- ThrowAccessException(pContext, pTargetMT, NULL, FALSE);
+ ThrowAccessException(pContext, pTargetMT, NULL);
}
return FALSE;
@@ -4938,7 +4938,7 @@ BOOL AccessCheckOptions::DemandMemberAccess(AccessCheckContext *pContext, Method
{
if (m_fThrowIfTargetIsInaccessible)
{
- ThrowAccessException(pContext, pTargetMT, NULL, FALSE);
+ ThrowAccessException(pContext, pTargetMT, NULL);
}
return FALSE;
@@ -4948,8 +4948,6 @@ BOOL AccessCheckOptions::DemandMemberAccess(AccessCheckContext *pContext, Method
#ifndef CROSSGEN_COMPILE
- BOOL fAccessingFrameworkCode = FALSE;
-
// In CoreCLR kRestrictedMemberAccess means that one can access private/internal
// classes/members in app code.
if (m_accessCheckType != kMemberAccess && pTargetMT)
@@ -4966,7 +4964,7 @@ BOOL AccessCheckOptions::DemandMemberAccess(AccessCheckContext *pContext, Method
// No Access
if (m_fThrowIfTargetIsInaccessible)
{
- ThrowAccessException(pContext, pTargetMT, NULL, fAccessingFrameworkCode);
+ ThrowAccessException(pContext, pTargetMT, NULL);
}
#endif // CROSSGEN_COMPILE
@@ -4982,8 +4980,7 @@ BOOL AccessCheckOptions::DemandMemberAccess(AccessCheckContext *pContext, Method
void AccessCheckOptions::ThrowAccessException(
AccessCheckContext* pContext,
MethodTable* pFailureMT, /* = NULL */
- Exception* pInnerException, /* = NULL */
- BOOL fAccessingFrameworkCode /* = FALSE */) const
+ Exception* pInnerException /* = NULL */) const
{
CONTRACTL
{
@@ -5005,7 +5002,7 @@ void AccessCheckOptions::ThrowAccessException(
// If we know the specific type that caused the failure, display it.
// Else display the whole type that we are trying to access.
MethodTable * pMT = (pFailureMT != NULL) ? pFailureMT : m_pTargetMT;
- ThrowTypeAccessException(pContext, pMT, 0, pInnerException, fAccessingFrameworkCode);
+ ThrowTypeAccessException(pContext, pMT, 0, pInnerException);
}
else if (m_pTargetMethod != NULL)
{
@@ -5018,17 +5015,17 @@ void AccessCheckOptions::ThrowAccessException(
// throwing the standard MethodAccessException.
if (pCallerMD != NULL && m_pTargetMethod == pCallerMD && pFailureMT != NULL)
{
- ThrowTypeAccessException(pContext, pFailureMT, 0, pInnerException, fAccessingFrameworkCode);
+ ThrowTypeAccessException(pContext, pFailureMT, 0, pInnerException);
}
else
{
- ThrowMethodAccessException(pContext, m_pTargetMethod, 0, pInnerException, fAccessingFrameworkCode);
+ ThrowMethodAccessException(pContext, m_pTargetMethod, 0, pInnerException);
}
}
else
{
_ASSERTE(m_pTargetField != NULL);
- ThrowFieldAccessException(pContext, m_pTargetField, 0, pInnerException, fAccessingFrameworkCode);
+ ThrowFieldAccessException(pContext, m_pTargetField, 0, pInnerException);
}
}
@@ -5085,80 +5082,10 @@ BOOL AccessCheckOptions::FailOrThrow(AccessCheckContext *pContext) const
return FALSE;
}
-// Generate access exception context strings that are due to potential security misconfiguration
-void GetAccessExceptionAdditionalContextForSecurity(Assembly *pAccessingAssembly,
- Assembly *pTargetAssembly,
- BOOL fAccessingFrameworkCode,
- StringArrayList *pContextInformation)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- PRECONDITION(CheckPointer(pAccessingAssembly));
- PRECONDITION(CheckPointer(pTargetAssembly));
- PRECONDITION(CheckPointer(pContextInformation));
- }
- CONTRACTL_END;
-
- if (fAccessingFrameworkCode)
- {
- SString accessingFrameworkCodeError;
- EEException::GetResourceMessage(IDS_E_ACCESSING_PRIVATE_FRAMEWORK_CODE, accessingFrameworkCodeError);
-
- pContextInformation->Append(accessingFrameworkCodeError);
- }
-
-
-}
-
-// Generate additional context about the root cause of an access exception which may help in debugging it (for
-// instance v4 APTCA implying transparnecy, or conditional APTCA not being enabled). If no additional
-// context is available, then this returns SString.Empty.
-SString GetAdditionalAccessExceptionContext(Assembly *pAccessingAssembly,
- Assembly *pTargetAssembly,
- BOOL fAccessingFrameworkCode)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- PRECONDITION(CheckPointer(pAccessingAssembly));
- PRECONDITION(CheckPointer(pTargetAssembly));
- }
- CONTRACTL_END;
-
- StringArrayList contextComponents;
-
- // See if the exception may have been caused by security
- GetAccessExceptionAdditionalContextForSecurity(pAccessingAssembly,
- pTargetAssembly,
- fAccessingFrameworkCode,
- &contextComponents);
-
- // Append each component of additional context we found into the additional context string in its own
- // paragraph.
- SString additionalContext;
- for (DWORD i = 0; i < contextComponents.GetCount(); ++i)
- {
- SString contextComponent = contextComponents.Get(i);
- if (!contextComponent.IsEmpty())
- {
- additionalContext.Append(W("\n\n"));
- additionalContext.Append(contextComponent);
- }
- }
-
- return additionalContext;
-}
-
void DECLSPEC_NORETURN ThrowFieldAccessException(AccessCheckContext* pContext,
FieldDesc *pFD,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5175,15 +5102,13 @@ void DECLSPEC_NORETURN ThrowFieldAccessException(AccessCheckContext* pContext,
ThrowFieldAccessException(pCallerMD,
pFD,
messageID,
- pInnerException,
- fAccessingFrameworkCode);
+ pInnerException);
}
void DECLSPEC_NORETURN ThrowFieldAccessException(MethodDesc* pCallerMD,
FieldDesc *pFD,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5202,11 +5127,7 @@ void DECLSPEC_NORETURN ThrowFieldAccessException(MethodDesc* pCallerMD,
messageID = IDS_E_FIELDACCESS;
}
- SString strAdditionalContext = GetAdditionalAccessExceptionContext(pCallerMD->GetAssembly(),
- pFD->GetApproxEnclosingMethodTable()->GetAssembly(),
- fAccessingFrameworkCode);
-
- EX_THROW_WITH_INNER(EEFieldException, (pFD, pCallerMD, strAdditionalContext, messageID), pInnerException);
+ EX_THROW_WITH_INNER(EEFieldException, (pFD, pCallerMD, SString::Empty(), messageID), pInnerException);
}
else
{
@@ -5217,8 +5138,7 @@ void DECLSPEC_NORETURN ThrowFieldAccessException(MethodDesc* pCallerMD,
void DECLSPEC_NORETURN ThrowMethodAccessException(AccessCheckContext* pContext,
MethodDesc *pCalleeMD,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5235,15 +5155,13 @@ void DECLSPEC_NORETURN ThrowMethodAccessException(AccessCheckContext* pContext,
ThrowMethodAccessException(pCallerMD,
pCalleeMD,
messageID,
- pInnerException,
- fAccessingFrameworkCode);
+ pInnerException);
}
void DECLSPEC_NORETURN ThrowMethodAccessException(MethodDesc* pCallerMD,
MethodDesc *pCalleeMD,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5262,11 +5180,7 @@ void DECLSPEC_NORETURN ThrowMethodAccessException(MethodDesc* pCallerMD,
messageID = IDS_E_METHODACCESS;
}
- SString strAdditionalContext = GetAdditionalAccessExceptionContext(pCallerMD->GetAssembly(),
- pCalleeMD->GetAssembly(),
- fAccessingFrameworkCode);
-
- EX_THROW_WITH_INNER(EEMethodException, (pCalleeMD, pCallerMD, strAdditionalContext, messageID), pInnerException);
+ EX_THROW_WITH_INNER(EEMethodException, (pCalleeMD, pCallerMD, SString::Empty(), messageID), pInnerException);
}
else
{
@@ -5277,8 +5191,7 @@ void DECLSPEC_NORETURN ThrowMethodAccessException(MethodDesc* pCallerMD,
void DECLSPEC_NORETURN ThrowTypeAccessException(AccessCheckContext* pContext,
MethodTable *pMT,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5295,15 +5208,13 @@ void DECLSPEC_NORETURN ThrowTypeAccessException(AccessCheckContext* pContext,
ThrowTypeAccessException(pCallerMD,
pMT,
messageID,
- pInnerException,
- fAccessingFrameworkCode);
+ pInnerException);
}
void DECLSPEC_NORETURN ThrowTypeAccessException(MethodDesc* pCallerMD,
MethodTable *pMT,
UINT messageID /* = 0 */,
- Exception *pInnerException /* = NULL */,
- BOOL fAccessingFrameworkCode /* = FALSE */)
+ Exception *pInnerException /* = NULL */)
{
CONTRACTL
{
@@ -5322,11 +5233,7 @@ void DECLSPEC_NORETURN ThrowTypeAccessException(MethodDesc* pCallerMD,
messageID = IDS_E_TYPEACCESS;
}
- SString strAdditionalContext = GetAdditionalAccessExceptionContext(pCallerMD->GetAssembly(),
- pMT->GetAssembly(),
- fAccessingFrameworkCode);
-
- EX_THROW_WITH_INNER(EETypeAccessException, (pMT, pCallerMD, strAdditionalContext, messageID), pInnerException);
+ EX_THROW_WITH_INNER(EETypeAccessException, (pMT, pCallerMD, SString::Empty(), messageID), pInnerException);
}
else
{