summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2019-03-22 14:53:31 +0100
committerJan Vorlicek <janvorli@microsoft.com>2019-03-25 18:04:24 +0100
commit7a928d80d2c6eb227b70144a0a8018f3ec67066b (patch)
treec421e299123786c53963da682dfe2c1f8a503fb9 /src
parente6c49f73eac2413fdc7a1024fc0f1585e39db026 (diff)
downloadcoreclr-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.rc1
-rw-r--r--src/dlls/mscorrc/resource.h1
-rw-r--r--src/vm/assemblynative.cpp16
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);
{