Concurrent Policy provider

David M. Lloyd david.lloyd at redhat.com
Fri Jul 11 03:20:33 UTC 2014


Maybe you already know this, but this past April, Sean Mullan (from 
Oracle) posted a "JEP Review Request" [1] for a blanket initiative to 
improve security manager performance.

This kind of thing sounds like exactly the sort of thing that would fit 
in under that initiative, IMO.

[1] 
http://mail.openjdk.java.net/pipermail/security-dev/2014-April/010432.html

On 07/10/2014 10:00 PM, Peter Firmstone wrote:
> Would there be interest in using a Policy provider and SecurityManager
> designed for concurrency in Java 9?
>
> Some of the issues experienced and solutions are mentioned below.
>
> http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/
>
>
> Regards,
>
> Peter.
>
> -------- Original Message --------
> Subject:     Concurrency-interest Digest, Vol 113, Issue 45
> Date:     Mon, 30 Jun 2014 12:00:01 -0400
> From:     concurrency-interest-request at cs.oswego.edu
> Reply-To:     concurrency-interest at cs.oswego.edu
> To:     concurrency-interest at cs.oswego.edu
>
>
>
> Send Concurrency-interest mailing list submissions to
>      concurrency-interest at cs.oswego.edu
>
> To subscribe or unsubscribe via the World Wide Web, visit
>      http://cs.oswego.edu/mailman/listinfo/concurrency-interest
> or, via email, send a message with subject or body 'help' to
>      concurrency-interest-request at cs.oswego.edu
>
> You can reach the person managing the list at
>      concurrency-interest-owner at cs.oswego.edu
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Concurrency-interest digest..."
>
>
> Today's Topics:
>
>     1. Re: ThreadLocalRandom clinit troubles (Peter Firmstone)
>     2. Re: ThreadLocalRandom clinit troubles (Alan Bateman)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 30 Jun 2014 20:02:30 +1000
> From: Peter Firmstone<peter.firmstone at zeus.net.au>
> To: Peter Levart<peter.levart at gmail.com>
> Cc: concurrency-interest at cs.oswego.edu
> Subject: Re: [concurrency-interest] ThreadLocalRandom clinit troubles
> Message-ID:<53B135B6.1030105 at zeus.net.au>
> Content-Type: text/plain; charset=UTF-8; format=flowed
>
> Hi Peter,
>
> There are a number of bottlenecks throughout the security
> infrastructure, we have reimplemented it as follows to avoid them and
> have also addressed some long standing issues:
>
> SecurityManager - cache previously checked AccessControlContext's
> (using a cache structure based on Cliff Click's non blocking hash map
> and Doug Lee's concurrent skip list set), to avoid repeately calling the
> policy provider (for example, you have numerous tasks in an
> ExecutorService and each has an identical AccessControlContext and all
> tasks cause a SocketPermission check).
>
> Policy provider - replaced the built in Java policy provider.  The built
> in Java Policy provider will hold a lock while making DNS calls,
> bringing all permission checks to a grinding halt.  It will also hold
> locks while accessing the file system.
>
> To avoid making DNS calls we've implemented our own policy provider,
> originated from Apache Harmony, but modified to use non blocking
> immutability.  It creates PermissionCollection's on demand, they're not
> shared among threads and are ordered in the most favourable order for a
> fast result.  It also supports undocumented Java file policy provider
> functionality.  Because Permission objects are immutable but lazily
> initialized, we call getActions() to ensure their state is completely
> initialized prior to publication.
>
> The policy provider uses a strictly RFC 3986 compliant immutable URI
> class, it performs bit shift operations on ASCII strings during
> normalisation and is used by the policy provider to avoid making DNS
> calls when checking CodeBase policy file permissions.
>
> As a result, the cost of the security infrastructure is less than 1% of
> CPU load during stress tests.
>
> This is part of the Apache River project, JERI (Jini Extensible Remote
> Invocation) performs remote method invocations as tasks running in a
> system threadpool, each task executes concurrently on any exported service.
>
> SecureClassLoader uses CodeSource's as keys in a Map, CodeSource uses
> URL in equals() and hashCode(), so we also have a RFC3986 compliant
> URLClassLoader to avoid making unnecessary DNS calls in SecureClassLoader.
>
> Rather than rely on an external untrusted DNS to determine the identity
> of CodeSource's, we use RFC 3986 compliant normalisation, without making
> DNS calls.  URL's still make DNS calls when retrieving a URL.  The
> difference is, two different host names that previously resolved to an
> identical IP address will no longer be equal, but now we can use dynamic
> dns addresses and fail over replication for domain names that use a
> range of IP addresses to answer for one domain address.  Standard Java
> SecureClassLoader behaviour can be had by setting a system property
>
> This also reduces or avoids calls to the built in java NameServiceProvider.
>
> If this code was in the JVM libraries, we wouldn't need it in our project.
>
> This code is freely available.
>
> Regards,
>
> Peter.
>
> On 29/06/2014 7:29 PM, Peter Levart wrote:
>>
>>  On 06/29/2014 03:53 AM, Peter Firmstone wrote:
>>>
>>>  It does look like a good solution.
>>>
>>>  You might wonder why we still need a custom SecurityManager?
>>>
>>>  Concurrency.
>>>
>>>  The ageing java security infrastructure is a huge bottleneck for
>>>  multithreaded code.
>>>
>>>  Regards,
>>>
>>>  Peter.
>>>
>>
>>  Hi Peter,
>>
>>  If you could identify the most critical bottleneck(s) of default
>>  SecurityManager, there might be a way to fix them...
>>
>>  Regards, Peter
>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>  >  Message: 1
>>>  >  Date: Thu, 26 Jun 2014 19:10:22 -0400
>>>  >  From: Doug Lea<dl at cs.oswego.edu<mailto:dl at cs.oswego.edu>>
>>>  >  To: Peter Levart<peter.levart at gmail.com
>>>  <mailto:peter.levart at gmail.com>>
>>>  >  Cc: core-libs-dev<core-libs-dev at openjdk.java.net
>>>  <mailto:core-libs-dev at openjdk.java.net>>,    OpenJDK
>>>  >  <security-dev at openjdk.java.net
>>>  <mailto:security-dev at openjdk.java.net>>,    concurrency-interest
>>>  >  <concurrency-interest at cs.oswego.edu
>>>  <mailto:concurrency-interest at cs.oswego.edu>>
>>>  >  Subject: Re: [concurrency-interest] ThreadLocalRandom clinit
>>> troubles
>>>  >  Message-ID:<53ACA85E.2030407 at cs.oswego.edu
>>>  <mailto:53ACA85E.2030407 at cs.oswego.edu>>
>>>  >  Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>  >
>>>  >
>>>  >  Peter: Thanks very much for attacking the shocking impact/complexity
>>>  >  of getting a few seed bits.
>>>  >
>>>  >  On 06/25/2014 01:41 PM, Peter Levart wrote:
>>>  >  >
>>>  >  >  Peeking around in the sun.security.provider package, I found
>>> there
>>>  >  >  already is a minimal internal infrastructure for obtaining random
>>>  >  >  seed. It's encapsulated in package-private abstract class
>>>  >  >  sun.security.provider.SeedGenerator with 4 implementations. It
>>> turns
>>>  >  >  out that, besides Java-only fall-back implementation called
>>>  >  >  ThreadedSeedGenerator and generic URLSeedGenerator, there are
>>>  also two
>>>  >  >  implementations of NativeSeedGenerator (one for UNIX-es which is
>>>  just
>>>  >  >  an extension of URLSeedGenerator and the other for Windows which
>>>  uses
>>>  >  >  MS CryptoAPI). I made a few tweaks that allow this
>>>  sub-infrastructure
>>>  >  >  to be used directly in ThreadLocalRandom and SplittableRandom:
>>>  >  >
>>>  >  >
>>>  http://cr.openjdk.java.net/~plevart/jdk9-dev/TLR_SR_SeedGenerator/webrev.01/
>>>
>>>  <http://cr.openjdk.java.net/%7Eplevart/jdk9-dev/TLR_SR_SeedGenerator/webrev.01/>
>>>
>>>
>>>  >  >
>>>  >
>>>  >  This seems to be the best idea yet, assuming that people are OK
>>>  >  with the changes to sun.security.provider.SeedGenerator and
>>>  >  NativeSeedGenerator.java
>>>  >
>>>  >  -Doug
>>>
>>>
>>>
>>>  _______________________________________________
>>>  Concurrency-interest mailing list
>>>  Concurrency-interest at cs.oswego.edu
>>>  http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>>
>
>
>
> ------------------------------
>
> Message: 2
> Date: Mon, 30 Jun 2014 13:53:38 +0100
> From: Alan Bateman<Alan.Bateman at oracle.com>
> To: Peter Firmstone<peter.firmstone at zeus.net.au>
> Cc: concurrency-interest at cs.oswego.edu
> Subject: Re: [concurrency-interest] ThreadLocalRandom clinit troubles
> Message-ID:<53B15DD2.8020200 at oracle.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> On 30/06/2014 11:02, Peter Firmstone wrote:
>>  Hi Peter,
>>
>>  There are a number of bottlenecks throughout the security
>>  infrastructure, we have reimplemented it as follows to avoid them and
>>  have also addressed some long standing issues:
>>
>>
>>  If this code was in the JVM libraries, we wouldn't need it in our
>>  project.
>>
> Have you considered bring some of these patches to OpenJDK?
>
> On RFC 3986 (you mentioned this a number of times) then there were
> previous attempts bring URI up to this, unfortunately had to be backed
> out due to compatibility issues and other breakage. It's definitely
> something that needs to be looked at again.
>
> -Alan
>
>
>
> ------------------------------
>
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>
>
> End of Concurrency-interest Digest, Vol 113, Issue 45
> *****************************************************
>

-- 
- DML



More information about the security-dev mailing list