diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2019-03-22 14:53:31 +0100 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2019-03-25 18:04:24 +0100 |
commit | 7a928d80d2c6eb227b70144a0a8018f3ec67066b (patch) | |
tree | c421e299123786c53963da682dfe2c1f8a503fb9 /src | |
parent | e6c49f73eac2413fdc7a1024fc0f1585e39db026 (diff) | |
download | coreclr-7a928d80d2c6eb227b70144a0a8018f3ec67066b.tar.gz coreclr-7a928d80d2c6eb227b70144a0a8018f3ec67066b.tar.bz2 coreclr-7a928d80d2c6eb227b70144a0a8018f3ec67066b.zip |
Disable loading IJW assemblies into collectible ALC
Diffstat (limited to 'src')
-rw-r--r-- | src/dlls/mscorrc/mscorrc.rc | 1 | ||||
-rw-r--r-- | src/dlls/mscorrc/resource.h | 1 | ||||
-rw-r--r-- | src/vm/assemblynative.cpp | 16 |
3 files changed, 17 insertions, 1 deletions
diff --git a/src/dlls/mscorrc/mscorrc.rc b/src/dlls/mscorrc/mscorrc.rc index 8e272ad2af..4853f00789 100644 --- a/src/dlls/mscorrc/mscorrc.rc +++ b/src/dlls/mscorrc/mscorrc.rc @@ -1079,6 +1079,7 @@ BEGIN BFA_UNEXPECTED_TOKEN_AFTER_GENINST "A valid typedef or typeref token is expected to follow a ELEMENT_TYPE_GENERICINST." BFA_TYPEDBYREFCANNOTHAVEBYREF "An ELEMENT_TYPE_TYPEDBYREF cannot have a ELEMENT_TYPE_BYREF modifier." BFA_REFERENCE_ASSEMBLY "Cannot load a reference assembly for execution." + BFA_IJW_IN_COLLECTIBLE_ALC "Cannot load a mixed assembly into a collectible AssemblyLoadContext." #ifdef FEATURE_COMINTEROP BFA_WINRT_INVALID_NAMESPACE_FOR_TYPE "Windows Runtime type '%1' has invalid namespace that does not begin with the file name in assembly '%2'." diff --git a/src/dlls/mscorrc/resource.h b/src/dlls/mscorrc/resource.h index a7d94874f4..609a31d253 100644 --- a/src/dlls/mscorrc/resource.h +++ b/src/dlls/mscorrc/resource.h @@ -530,6 +530,7 @@ #define BFA_BAD_CLASS_INT_CA_FORMAT 0x2048 #define BFA_BAD_COMPLUS_SIG 0x2049 #define BFA_BAD_ELEM_IN_SIZEOF 0x204b +#define BFA_IJW_IN_COLLECTIBLE_ALC 0x204c #define IDS_CLASSLOAD_INTERFACE_NO_ACCESS 0x204f diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp index ed2ce660e7..6cbb8afc17 100644 --- a/src/vm/assemblynative.cpp +++ b/src/vm/assemblynative.cpp @@ -248,6 +248,13 @@ void QCALLTYPE AssemblyNative::LoadFromPath(INT_PTR ptrNativeAssemblyLoadContext // Need to verify that this is a valid CLR assembly. if (!pILImage->CheckILFormat()) ThrowHR(COR_E_BADIMAGEFORMAT, BFA_BAD_IL); + + LoaderAllocator* pLoaderAllocator = NULL; + if (SUCCEEDED(pBinderContext->GetLoaderAllocator((LPVOID*)&pLoaderAllocator)) && pLoaderAllocator->IsCollectible() && !pILImage->IsILOnly()) + { + // Loading IJW assemblies into a collectible AssemblyLoadContext is not allowed + ThrowHR(COR_E_BADIMAGEFORMAT, BFA_IJW_IN_COLLECTIBLE_ALC); + } } // Form the PEImage for the NI assembly, if specified @@ -327,7 +334,14 @@ void QCALLTYPE AssemblyNative::LoadFromStream(INT_PTR ptrNativeAssemblyLoadConte // Get the binder context in which the assembly will be loaded ICLRPrivBinder *pBinderContext = reinterpret_cast<ICLRPrivBinder*>(ptrNativeAssemblyLoadContext); - + + LoaderAllocator* pLoaderAllocator = NULL; + if (SUCCEEDED(pBinderContext->GetLoaderAllocator((LPVOID*)&pLoaderAllocator)) && pLoaderAllocator->IsCollectible() && !pILImage->IsILOnly()) + { + // Loading IJW assemblies into a collectible AssemblyLoadContext is not allowed + ThrowHR(COR_E_BADIMAGEFORMAT, BFA_IJW_IN_COLLECTIBLE_ALC); + } + // Pass the stream based assembly as IL and NI in an attempt to bind and load it Assembly* pLoadedAssembly = AssemblyNative::LoadFromPEImage(pBinderContext, pILImage, NULL); { |