From b6c8522d8c02d7ed3ebc0ee8200a0d7a001b1c6d Mon Sep 17 00:00:00 2001 From: Eugene Rozenfeld Date: Wed, 25 Jan 2017 11:09:57 -0800 Subject: Remove System.Security.Permissions.SecurityPermissionAttribute from System.Private.CoreLib. When compiling with /unsafe+ Roslyn emits .permissionset reqmin = {class 'System.Security.Permissions.SecurityPermissionAttribute, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' = {property bool 'SkipVerification' = bool(true)}} if System.Security.Permissions.SecurityPermissionAttribute is present. In particular, System.Private.CoreLib.dll is compiled with /unsafe+ and has the above in the manifest. https://github.com/dotnet/coreclr/commit/e516211b2d3a3ae2dbd80f2c94b129910a9e280d made BclRewriter remove System.Security.Permissions.SecurityPermissionAttribute from System.Private.CoreLib.dll but the above reference remained. This change removes System.Security.Permissions.SecurityPermissionAttribute completely to avoid confusion when tools are analyzing msil and try to resolve the manifest of System.Private.CoreLib.dll. --- .../src/Internal/Runtime/Augments/RuntimeThread.cs | 2 - .../Security/Permissions/PermissionAttributes.cs | 103 --------------------- src/mscorlib/src/System/Threading/Thread.cs | 3 - 3 files changed, 108 deletions(-) diff --git a/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs b/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs index 3aafe01a2c..8f3a8c47c2 100644 --- a/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs +++ b/src/mscorlib/src/Internal/Runtime/Augments/RuntimeThread.cs @@ -163,8 +163,6 @@ namespace Internal.Runtime.Augments ** thread is not currently blocked in that manner, it will be interrupted ** when it next begins to block. =========================================================================*/ -#pragma warning disable 618 // obsolete types: SecurityPermissionAttribute, SecurityAction -#pragma warning restore 618 // obsolete types: SecurityPermissionAttribute, SecurityAction public void Interrupt() => InterruptInternal(); // Internal helper (since we can't place security demands on diff --git a/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs b/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs index e6fc2a4693..428a399a99 100644 --- a/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs +++ b/src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs @@ -502,109 +502,6 @@ namespace System.Security.Permissions } } - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )] - [System.Runtime.InteropServices.ComVisible(true)] - [Serializable] - // The csharp compiler requires these types to be public, but they are not used elsewhere. - [Obsolete("SecurityPermissionAttribute is no longer accessible to application code.")] - sealed public class SecurityPermissionAttribute : CodeAccessSecurityAttribute - { - private SecurityPermissionFlag m_flag = SecurityPermissionFlag.NoFlags; - - public SecurityPermissionAttribute( SecurityAction action ) - : base( action ) - { - } - - public SecurityPermissionFlag Flags { - get { return m_flag; } - set { m_flag = value; } - } - - public bool Assertion { - get { return (m_flag & SecurityPermissionFlag.Assertion) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.Assertion : m_flag & ~SecurityPermissionFlag.Assertion; } - } - - public bool UnmanagedCode { - get { return (m_flag & SecurityPermissionFlag.UnmanagedCode) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.UnmanagedCode : m_flag & ~SecurityPermissionFlag.UnmanagedCode; } - } - - public bool SkipVerification { - get { return (m_flag & SecurityPermissionFlag.SkipVerification) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.SkipVerification : m_flag & ~SecurityPermissionFlag.SkipVerification; } - } - - public bool Execution { - get { return (m_flag & SecurityPermissionFlag.Execution) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.Execution : m_flag & ~SecurityPermissionFlag.Execution; } - } - - public bool ControlThread { - get { return (m_flag & SecurityPermissionFlag.ControlThread) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlThread : m_flag & ~SecurityPermissionFlag.ControlThread; } - } - - public bool ControlEvidence { - get { return (m_flag & SecurityPermissionFlag.ControlEvidence) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlEvidence : m_flag & ~SecurityPermissionFlag.ControlEvidence; } - } - - public bool ControlPolicy { - get { return (m_flag & SecurityPermissionFlag.ControlPolicy) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlPolicy : m_flag & ~SecurityPermissionFlag.ControlPolicy; } - } - - public bool SerializationFormatter { - get { return (m_flag & SecurityPermissionFlag.SerializationFormatter) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.SerializationFormatter : m_flag & ~SecurityPermissionFlag.SerializationFormatter; } - } - - public bool ControlDomainPolicy { - get { return (m_flag & SecurityPermissionFlag.ControlDomainPolicy) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlDomainPolicy : m_flag & ~SecurityPermissionFlag.ControlDomainPolicy; } - } - - public bool ControlPrincipal { - get { return (m_flag & SecurityPermissionFlag.ControlPrincipal) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlPrincipal : m_flag & ~SecurityPermissionFlag.ControlPrincipal; } - } - - public bool ControlAppDomain { - get { return (m_flag & SecurityPermissionFlag.ControlAppDomain) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.ControlAppDomain : m_flag & ~SecurityPermissionFlag.ControlAppDomain; } - } - - public bool RemotingConfiguration { - get { return (m_flag & SecurityPermissionFlag.RemotingConfiguration) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.RemotingConfiguration : m_flag & ~SecurityPermissionFlag.RemotingConfiguration; } - } - - [System.Runtime.InteropServices.ComVisible(true)] - public bool Infrastructure { - get { return (m_flag & SecurityPermissionFlag.Infrastructure) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.Infrastructure : m_flag & ~SecurityPermissionFlag.Infrastructure; } - } - - public bool BindingRedirects { - get { return (m_flag & SecurityPermissionFlag.BindingRedirects) != 0; } - set { m_flag = value ? m_flag | SecurityPermissionFlag.BindingRedirects : m_flag & ~SecurityPermissionFlag.BindingRedirects; } - } - - public override IPermission CreatePermission() - { - if (m_unrestricted) - { - return new SecurityPermission( PermissionState.Unrestricted ); - } - else - { - return new SecurityPermission( m_flag ); - } - } - } - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false )] [System.Runtime.InteropServices.ComVisible(true)] [Serializable] diff --git a/src/mscorlib/src/System/Threading/Thread.cs b/src/mscorlib/src/System/Threading/Thread.cs index 339869dc85..b23e8a98b2 100644 --- a/src/mscorlib/src/System/Threading/Thread.cs +++ b/src/mscorlib/src/System/Threading/Thread.cs @@ -343,9 +343,6 @@ namespace System.Threading { ** If Abort is called twice on the same thread, a DuplicateThreadAbort ** exception is thrown. =========================================================================*/ -#pragma warning disable 618 - [SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)] -#pragma warning restore 618 public void Abort() { AbortInternal(); -- cgit v1.2.3