Hi Chris,

Looks fine

Roger


On 11/5/2017 5:02 AM, Chris Hegarty wrote:
Currently JDK code that wants to create innocuous threads is required to do so within a 
privileged context that has the "enableContextClassLoaderOverride" 
RuntimePermission ( since the InnocuousThread class overrides setContextClassLoader ). 
This permissions should not be required, especially if code in de-privileged modules 
wants to create innocuous threads.

The factory methods for creating innocuous threads should assert privileges 
before constructing the thread.

diff --git a/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java 
b/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java
--- a/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java
+++ b/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java
@@ -62,10 +62,16 @@
       * set to the system class loader.
       */
      public static Thread newThread(String name, Runnable target) {
-        return new InnocuousThread(INNOCUOUSTHREADGROUP,
-                                   target,
-                                   name,
-                                   ClassLoader.getSystemClassLoader());
+        return AccessController.doPrivileged(
+                new PrivilegedAction<Thread>() {
+                    @Override
+                    public Thread run() {
+                        return new InnocuousThread(INNOCUOUSTHREADGROUP,
+                                                   target,
+                                                   name,
+                                                   
ClassLoader.getSystemClassLoader());
+                    }
+                });
      }
/**
@@ -80,8 +86,14 @@
       * Returns a new InnocuousThread with null context class loader.
       */
      public static Thread newSystemThread(String name, Runnable target) {
-        return new InnocuousThread(INNOCUOUSTHREADGROUP,
-                                   target, name, null);
+        return AccessController.doPrivileged(
+                new PrivilegedAction<Thread>() {
+                    @Override
+                    public Thread run() {
+                        return new InnocuousThread(INNOCUOUSTHREADGROUP,
+                                                   target, name, null);
+                    }
+                });
      }
-Chris.

Reply via email to