From 3c5294a89ff2a0389f393d42cf101ac8e545e7cc Mon Sep 17 00:00:00 2001 From: Sebastien Pouliot Date: Wed, 25 Nov 2015 17:08:21 -0500 Subject: [PATCH] Use DISABLE_CAS_USE to remove the use of several *Permission calls (forcibly removed by the linker on XI) [#36255] --- .../System.Data.Linq/misc/SecurityUtils.cs | 10 ++++++++++ .../System.Data/System/Data/Common/AdapterUtil.cs | 9 +++++++++ .../System/Runtime/Serialization/Globals.cs | 3 ++- .../Serialization/XmlObjectSerializerContext.cs | 4 ++++ .../XmlObjectSerializerWriteContext.cs | 2 ++ .../design/DesigntimeLicenseContext.cs | 15 +++++++++++++-- .../System/compmod/system/diagnostics/Trace.cs | 6 ++++-- .../compmod/system/diagnostics/TraceEventCache.cs | 6 ++++-- .../compmod/system/diagnostics/TraceInternal.cs | 2 ++ 9 files changed, 50 insertions(+), 7 deletions(-) diff --git a/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs b/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs index 159dedbb6c6..e4ede4374f4 100644 --- a/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs +++ b/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs @@ -37,6 +37,7 @@ namespace System.Windows.Forms /// internal static class SecurityUtils { +#if !DISABLE_CAS_USE private static volatile ReflectionPermission memberAccessPermission = null; private static volatile ReflectionPermission restrictedMemberAccessPermission = null; @@ -58,24 +59,30 @@ namespace System.Windows.Forms return restrictedMemberAccessPermission; } } +#endif private static void DemandReflectionAccess(Type type) { +#if !DISABLE_CAS_USE try { MemberAccessPermission.Demand(); } catch (SecurityException) { DemandGrantSet(type.Assembly); } +#endif } [SecuritySafeCritical] private static void DemandGrantSet(Assembly assembly) { +#if !DISABLE_CAS_USE PermissionSet targetGrantSet = assembly.PermissionSet; targetGrantSet.AddPermission(RestrictedMemberAccessPermission); targetGrantSet.Demand(); +#endif } private static bool HasReflectionPermission(Type type) { +#if !DISABLE_CAS_USE try { DemandReflectionAccess(type); return true; @@ -84,6 +91,9 @@ namespace System.Windows.Forms } return false; +#else + return true; +#endif } diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs b/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs index 04cd1e4a72c..1116bfda764 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs @@ -2120,6 +2120,7 @@ namespace System.Data.Common { [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] static internal Stream GetFileStream(string filename) { +#if !DISABLE_CAS_USE (new FileIOPermission(FileIOPermissionAccess.Read, filename)).Assert(); try { return new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read); @@ -2127,11 +2128,15 @@ namespace System.Data.Common { finally { FileIOPermission.RevertAssert(); } +#else + return new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read); +#endif } [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] static internal FileVersionInfo GetVersionInfo(string filename) { +#if !DISABLE_CAS_USE (new FileIOPermission(FileIOPermissionAccess.Read, filename)).Assert(); // MDAC 62038 try { return FileVersionInfo.GetVersionInfo(filename); // MDAC 60411 @@ -2139,7 +2144,11 @@ namespace System.Data.Common { finally { FileIOPermission.RevertAssert(); } +#else + return FileVersionInfo.GetVersionInfo(filename); // MDAC 60411 +#endif } + #if MOBILE static internal object LocalMachineRegistryValue(string subkey, string queryvalue) { return null; diff --git a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs index 0cdf9cde68b..f18da31004b 100644 --- a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs +++ b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs @@ -1105,6 +1105,7 @@ namespace System.Runtime.Serialization } } +#if !DISABLE_CAS_USE [Fx.Tag.SecurityNote(Critical = "Holds instance of SecurityPermission that we will Demand for SerializationFormatter." + " Should not be modified to something else.")] [SecurityCritical] @@ -1136,7 +1137,7 @@ namespace System.Runtime.Serialization return memberAccessPermission; } } - +#endif public const bool DefaultIsRequired = false; public const bool DefaultEmitDefaultValue = true; diff --git a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs index a374cebc455..6a71d9a194c 100644 --- a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs +++ b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs @@ -89,11 +89,13 @@ namespace System.Runtime.Serialization [SecuritySafeCritical] public void DemandSerializationFormatterPermission() { +#if !DISABLE_CAS_USE if (!demandedSerializationFormatterPermission) { Globals.SerializationFormatterPermission.Demand(); demandedSerializationFormatterPermission = true; } +#endif } [Fx.Tag.SecurityNote(Critical = "Demands MemberAccess permission. demanding the right permission is critical.", @@ -101,11 +103,13 @@ namespace System.Runtime.Serialization [SecuritySafeCritical] public void DemandMemberAccessPermission() { +#if !DISABLE_CAS_USE if (!demandedMemberAccessPermission) { Globals.MemberAccessPermission.Demand(); demandedMemberAccessPermission = true; } + #endif } public StreamingContext GetStreamingContext() diff --git a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs index a5f77c25aff..3d953393b4b 100644 --- a/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs +++ b/mcs/class/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs @@ -494,8 +494,10 @@ namespace System.Runtime.Serialization [MethodImpl(MethodImplOptions.NoInlining)] internal void GetObjectData(ISerializable obj, SerializationInfo serInfo, StreamingContext context) { +#if !DISABLE_CAS_USE // Demand the serialization formatter permission every time Globals.SerializationFormatterPermission.Demand(); +#endif obj.GetObjectData(serInfo, context); } diff --git a/mcs/class/referencesource/System/compmod/system/componentmodel/design/DesigntimeLicenseContext.cs b/mcs/class/referencesource/System/compmod/system/componentmodel/design/DesigntimeLicenseContext.cs index e4cd3937f2b..6938ce280f6 100644 --- a/mcs/class/referencesource/System/compmod/system/componentmodel/design/DesigntimeLicenseContext.cs +++ b/mcs/class/referencesource/System/compmod/system/componentmodel/design/DesigntimeLicenseContext.cs @@ -93,6 +93,7 @@ namespace System.ComponentModel.Design { Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"rawfile: " + rawFile); string codeBase; +#if !DISABLE_CAS_USE // FileIOPermission is required for ApplicationBase in URL-hosted domains FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); perm.Assert(); @@ -102,6 +103,9 @@ namespace System.ComponentModel.Design { finally { CodeAccessPermission.RevertAssert(); } +#else + codeBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; +#endif if (rawFile != null && codeBase != null) { licenseFile = new Uri(new Uri(codeBase), rawFile); } @@ -129,6 +133,7 @@ namespace System.ComponentModel.Design { // file://fullpath/foo.exe // string fileName; +#if !DISABLE_CAS_USE FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); perm.Assert(); try @@ -140,6 +145,10 @@ namespace System.ComponentModel.Design { { CodeAccessPermission.RevertAssert(); } +#else + fileName = GetLocalPath(asm.EscapedCodeBase); + fileName = new FileInfo(fileName).Name; +#endif Stream s = asm.GetManifestResourceStream(fileName + ".licenses"); if (s == null) { @@ -245,10 +254,11 @@ namespace System.ComponentModel.Design { static Stream OpenRead(Uri resourceUri) { Stream result = null; - +#if !DISABLE_CAS_USE PermissionSet perms = new PermissionSet(PermissionState.Unrestricted); perms.Assert(); +#endif try { WebClient webClient = new WebClient(); webClient.Credentials = CredentialCache.DefaultCredentials; @@ -257,10 +267,11 @@ namespace System.ComponentModel.Design { catch (Exception e) { Debug.Fail(e.ToString()); } +#if !DISABLE_CAS_USE finally { CodeAccessPermission.RevertAssert(); } - +#endif return result; } } diff --git a/mcs/class/referencesource/System/compmod/system/diagnostics/Trace.cs b/mcs/class/referencesource/System/compmod/system/diagnostics/Trace.cs index 9d9a20aac1c..2f9df3f4564 100644 --- a/mcs/class/referencesource/System/compmod/system/diagnostics/Trace.cs +++ b/mcs/class/referencesource/System/compmod/system/diagnostics/Trace.cs @@ -30,9 +30,10 @@ namespace System.Diagnostics { public static TraceListenerCollection Listeners { [HostProtection(SharedState=true)] get { +#if !DISABLE_CAS_USE // Do a full damand new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); - +#endif return TraceInternal.Listeners; } } @@ -112,9 +113,10 @@ namespace System.Diagnostics { /// [System.Diagnostics.Conditional("TRACE")] public static void Close() { +#if !DISABLE_CAS_USE // Do a full damand new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); - + #endif TraceInternal.Close(); } diff --git a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs index 42724de13b1..eee1e05c125 100644 --- a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs +++ b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs @@ -30,9 +30,10 @@ namespace System.Diagnostics { get { if (stackTrace == null) stackTrace = Environment.StackTrace; +#if !DISABLE_CAS_USE else new EnvironmentPermission(PermissionState.Unrestricted).Demand(); - +#endif return stackTrace; } } @@ -76,9 +77,10 @@ namespace System.Diagnostics { [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] private static void InitProcessInfo() { +#if !DISABLE_CAS_USE // Demand unmanaged code permission new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); - +#endif if (processName == null) { Process p = Process.GetCurrentProcess(); try { diff --git a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceInternal.cs b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceInternal.cs index 68907803129..42bbb8a75c0 100644 --- a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceInternal.cs +++ b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceInternal.cs @@ -62,7 +62,9 @@ namespace System.Diagnostics { internal static string AppName { get { if (appName == null) { +#if !DISABLE_CAS_USE new EnvironmentPermission(EnvironmentPermissionAccess.Read, "Path").Assert(); +#endif appName = Path.GetFileName(Environment.GetCommandLineArgs()[0]); } return appName; -- 2.25.1