From 5e01c40b19a5bf4d0266747ca73aca4193799d97 Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Wed, 13 Nov 2024 18:49:31 +0000 Subject: [PATCH] 8343981: Remove usage of security manager from Thread and related classes Reviewed-by: rriggs, yzheng --- .../share/classes/java/lang/System.java | 4 - .../share/classes/java/lang/Thread.java | 172 ++---------------- .../classes/java/lang/ThreadBuilders.java | 4 +- .../classes/java/lang/VirtualThread.java | 63 +++---- .../jdk/internal/access/JavaLangAccess.java | 6 - .../jdk/internal/misc/CarrierThread.java | 17 +- .../jdk/internal/misc/InnocuousThread.java | 55 +----- src/java.base/share/classes/module-info.java | 1 - .../com/sun/jndi/ldap/VersionHelper.java | 12 +- .../reflect/CallerSensitive/CheckCSMs.java | 2 - 10 files changed, 54 insertions(+), 282 deletions(-) diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java index 8b2e97ec731..b5cea4236ad 100644 --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -47,7 +47,6 @@ import java.nio.channels.Channel; import java.nio.channels.spi.SelectorProvider; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; -import java.security.AccessControlContext; import java.security.AccessController; import java.security.CodeSource; import java.security.PrivilegedAction; @@ -2134,9 +2133,6 @@ public final class System { public void registerShutdownHook(int slot, boolean registerShutdownInProgress, Runnable hook) { Shutdown.add(slot, registerShutdownInProgress, hook); } - public Thread newThreadWithAcc(Runnable target, @SuppressWarnings("removal") AccessControlContext acc) { - return new Thread(target, acc); - } @SuppressWarnings("removal") public void invokeFinalize(Object o) throws Throwable { o.finalize(); diff --git a/src/java.base/share/classes/java/lang/Thread.java b/src/java.base/share/classes/java/lang/Thread.java index 16b12721169..7e54d044579 100644 --- a/src/java.base/share/classes/java/lang/Thread.java +++ b/src/java.base/share/classes/java/lang/Thread.java @@ -27,9 +27,6 @@ package java.lang; import java.lang.ref.Reference; import java.lang.reflect.Field; -import java.security.AccessController; -import java.security.AccessControlContext; -import java.security.PrivilegedAction; import java.time.Duration; import java.util.Map; import java.util.HashMap; @@ -41,8 +38,6 @@ import jdk.internal.event.ThreadSleepEvent; import jdk.internal.misc.TerminatingThreadLocal; import jdk.internal.misc.Unsafe; import jdk.internal.misc.VM; -import jdk.internal.reflect.CallerSensitive; -import jdk.internal.reflect.Reflection; import jdk.internal.vm.Continuation; import jdk.internal.vm.ScopedValueContainer; import jdk.internal.vm.StackableScope; @@ -52,7 +47,6 @@ import jdk.internal.vm.annotation.Hidden; import jdk.internal.vm.annotation.IntrinsicCandidate; import jdk.internal.vm.annotation.Stable; import sun.nio.ch.Interruptible; -import sun.security.util.SecurityConstants; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; @@ -652,21 +646,6 @@ public class Thread implements Runnable { } } - /** - * Returns the context class loader to inherit from the parent thread. - * See Thread initialization. - */ - private static ClassLoader contextClassLoader(Thread parent) { - @SuppressWarnings("removal") - SecurityManager sm = System.getSecurityManager(); - if (sm == null || isCCLOverridden(parent.getClass())) { - return parent.getContextClassLoader(); - } else { - // skip call to getContextClassLoader - return parent.contextClassLoader; - } - } - /** * Initializes a platform Thread. * @@ -676,11 +655,8 @@ public class Thread implements Runnable { * @param task the object whose run() method gets called * @param stackSize the desired stack size for the new thread, or * zero to indicate that this parameter is to be ignored. - * @param acc ignored */ - @SuppressWarnings("removal") - Thread(ThreadGroup g, String name, int characteristics, Runnable task, - long stackSize, AccessControlContext acc) { + Thread(ThreadGroup g, String name, int characteristics, Runnable task, long stackSize) { Thread parent = currentThread(); boolean attached = (parent == this); // primordial or JNI attached @@ -691,27 +667,10 @@ public class Thread implements Runnable { } this.holder = new FieldHolder(g, task, stackSize, NORM_PRIORITY, false); } else { - SecurityManager sm = System.getSecurityManager(); if (g == null) { - // the security manager can choose the thread group - if (sm != null) { - g = sm.getThreadGroup(); - } - // default to current thread's group - if (g == null) { - g = parent.getThreadGroup(); - } + g = parent.getThreadGroup(); } - - // permission checks when creating a child Thread - if (sm != null) { - sm.checkAccess(g); - if (isCCLOverridden(getClass())) { - sm.checkPermission(SecurityConstants.SUBCLASS_IMPLEMENTATION_PERMISSION); - } - } - int priority = Math.min(parent.getPriority(), g.getMaxPriority()); this.holder = new FieldHolder(g, task, stackSize, priority, parent.isDaemon()); } @@ -732,7 +691,7 @@ public class Thread implements Runnable { this.inheritableThreadLocals = ThreadLocal.createInheritedMap(parentMap); } if (VM.isBooted()) { - this.contextClassLoader = contextClassLoader(parent); + this.contextClassLoader = parent.getContextClassLoader(); } } else if (VM.isBooted()) { // default CCL to the system class loader when not inheriting @@ -763,7 +722,7 @@ public class Thread implements Runnable { if (parentMap != null && parentMap.size() > 0) { this.inheritableThreadLocals = ThreadLocal.createInheritedMap(parentMap); } - this.contextClassLoader = contextClassLoader(parent); + this.contextClassLoader = parent.getContextClassLoader(); } else { // default CCL to the system class loader when not inheriting this.contextClassLoader = ClassLoader.getSystemClassLoader(); @@ -1105,7 +1064,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread() { - this(null, null, 0, null, 0, null); + this(null, null, 0, null, 0); } /** @@ -1126,16 +1085,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(Runnable task) { - this(null, null, 0, task, 0, null); - } - - /** - * Creates a new Thread that inherits the given AccessControlContext - * but thread-local variables are not inherited. - * This is not a public constructor. - */ - Thread(Runnable task, @SuppressWarnings("removal") AccessControlContext acc) { - this(null, null, 0, task, 0, acc); + this(null, null, 0, task, 0); } /** @@ -1160,7 +1110,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(ThreadGroup group, Runnable task) { - this(group, null, 0, task, 0, null); + this(group, null, 0, task, 0); } /** @@ -1177,7 +1127,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(String name) { - this(null, checkName(name), 0, null, 0, null); + this(null, checkName(name), 0, null, 0); } /** @@ -1198,7 +1148,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(ThreadGroup group, String name) { - this(group, checkName(name), 0, null, 0, null); + this(group, checkName(name), 0, null, 0); } /** @@ -1220,7 +1170,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(Runnable task, String name) { - this(null, checkName(name), 0, task, 0, null); + this(null, checkName(name), 0, task, 0); } /** @@ -1256,7 +1206,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(ThreadGroup group, Runnable task, String name) { - this(group, checkName(name), 0, task, 0, null); + this(group, checkName(name), 0, task, 0); } /** @@ -1330,7 +1280,7 @@ public class Thread implements Runnable { * @see Inheritance when creating threads */ public Thread(ThreadGroup group, Runnable task, String name, long stackSize) { - this(group, checkName(name), 0, task, stackSize, null); + this(group, checkName(name), 0, task, stackSize); } /** @@ -1390,7 +1340,7 @@ public class Thread implements Runnable { long stackSize, boolean inheritInheritableThreadLocals) { this(group, checkName(name), (inheritInheritableThreadLocals ? 0 : NO_INHERIT_THREAD_LOCALS), - task, stackSize, null); + task, stackSize); } /** @@ -2140,18 +2090,8 @@ public class Thread implements Runnable { * * @since 1.2 */ - @CallerSensitive public ClassLoader getContextClassLoader() { - ClassLoader cl = this.contextClassLoader; - if (cl == null) - return null; - @SuppressWarnings("removal") - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - Class caller = Reflection.getCallerClass(); - ClassLoader.checkClassLoaderPermission(cl, caller); - } - return cl; + return contextClassLoader; } /** @@ -2167,11 +2107,6 @@ public class Thread implements Runnable { * @since 1.2 */ public void setContextClassLoader(ClassLoader cl) { - @SuppressWarnings("removal") - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - sm.checkPermission(new RuntimePermission("setContextClassLoader")); - } contextClassLoader = cl; } @@ -2220,12 +2155,6 @@ public class Thread implements Runnable { */ public StackTraceElement[] getStackTrace() { if (this != Thread.currentThread()) { - // check for getStackTrace permission - @SuppressWarnings("removal") - SecurityManager security = System.getSecurityManager(); - if (security != null) { - security.checkPermission(SecurityConstants.GET_STACK_TRACE_PERMISSION); - } // optimization so we do not call into the vm for threads that // have not yet started or have terminated if (!isAlive()) { @@ -2285,14 +2214,6 @@ public class Thread implements Runnable { * @since 1.5 */ public static Map getAllStackTraces() { - // check for getStackTrace permission - @SuppressWarnings("removal") - SecurityManager security = System.getSecurityManager(); - if (security != null) { - security.checkPermission(SecurityConstants.GET_STACK_TRACE_PERMISSION); - security.checkPermission(SecurityConstants.MODIFY_THREADGROUP_PERMISSION); - } - // Get a snapshot of the list of all threads Thread[] threads = getThreads(); StackTraceElement[][] traces = dumpThreads(threads); @@ -2307,64 +2228,6 @@ public class Thread implements Runnable { return m; } - /** cache of subclass security audit results */ - private static class Caches { - /** cache of subclass security audit results */ - static final ClassValue subclassAudits = - new ClassValue<>() { - @Override - protected Boolean computeValue(Class type) { - return auditSubclass(type); - } - }; - } - - /** - * Verifies that this (possibly subclass) instance can be constructed - * without violating security constraints: the subclass must not override - * security-sensitive non-final methods, or else the - * "enableContextClassLoaderOverride" RuntimePermission is checked. - */ - private static boolean isCCLOverridden(Class cl) { - if (cl == Thread.class) - return false; - - return Caches.subclassAudits.get(cl); - } - - /** - * Performs reflective checks on given subclass to verify that it doesn't - * override security-sensitive non-final methods. Returns true if the - * subclass overrides any of the methods, false otherwise. - */ - private static boolean auditSubclass(final Class subcl) { - @SuppressWarnings("removal") - Boolean result = AccessController.doPrivileged( - new PrivilegedAction<>() { - public Boolean run() { - for (Class cl = subcl; - cl != Thread.class; - cl = cl.getSuperclass()) - { - try { - cl.getDeclaredMethod("getContextClassLoader", new Class[0]); - return Boolean.TRUE; - } catch (NoSuchMethodException ex) { - } - try { - Class[] params = {ClassLoader.class}; - cl.getDeclaredMethod("setContextClassLoader", params); - return Boolean.TRUE; - } catch (NoSuchMethodException ex) { - } - } - return Boolean.FALSE; - } - } - ); - return result.booleanValue(); - } - /** * Return an array of all live threads. */ @@ -2603,12 +2466,6 @@ public class Thread implements Runnable { * @since 1.5 */ public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler ueh) { - @SuppressWarnings("removal") - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - sm.checkPermission( - new RuntimePermission("setDefaultUncaughtExceptionHandler")); - } defaultUncaughtExceptionHandler = ueh; } @@ -2675,7 +2532,6 @@ public class Thread implements Runnable { /** * Holder class for constants. */ - @SuppressWarnings("removal") private static class Constants { // Thread group for virtual threads. static final ThreadGroup VTHREAD_GROUP; diff --git a/src/java.base/share/classes/java/lang/ThreadBuilders.java b/src/java.base/share/classes/java/lang/ThreadBuilders.java index 234807d4cc2..62c29651d11 100644 --- a/src/java.base/share/classes/java/lang/ThreadBuilders.java +++ b/src/java.base/share/classes/java/lang/ThreadBuilders.java @@ -179,7 +179,7 @@ class ThreadBuilders { public Thread unstarted(Runnable task) { Objects.requireNonNull(task); String name = nextThreadName(); - var thread = new Thread(group, name, characteristics(), task, stackSize, null); + var thread = new Thread(group, name, characteristics(), task, stackSize); if (daemonChanged) thread.daemon(daemon); if (priority != 0) @@ -353,7 +353,7 @@ class ThreadBuilders { public Thread newThread(Runnable task) { Objects.requireNonNull(task); String name = nextThreadName(); - Thread thread = new Thread(group, name, characteristics(), task, stackSize, null); + Thread thread = new Thread(group, name, characteristics(), task, stackSize); if (daemonChanged) thread.daemon(daemon); if (priority != 0) diff --git a/src/java.base/share/classes/java/lang/VirtualThread.java b/src/java.base/share/classes/java/lang/VirtualThread.java index 80838ff9d17..1bf4367bed4 100644 --- a/src/java.base/share/classes/java/lang/VirtualThread.java +++ b/src/java.base/share/classes/java/lang/VirtualThread.java @@ -24,8 +24,6 @@ */ package java.lang; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.Locale; import java.util.Objects; import java.util.concurrent.CountDownLatch; @@ -58,7 +56,6 @@ import jdk.internal.vm.annotation.JvmtiHideEvents; import jdk.internal.vm.annotation.JvmtiMountTransition; import jdk.internal.vm.annotation.ReservedStackAccess; import sun.nio.ch.Interruptible; -import sun.security.action.GetPropertyAction; import static java.util.concurrent.TimeUnit.*; /** @@ -1013,7 +1010,6 @@ final class VirtualThread extends BaseVirtualThread { } @Override - @SuppressWarnings("removal") public void interrupt() { if (Thread.currentThread() != this) { // if current thread is a virtual thread then prevent it from being @@ -1409,39 +1405,32 @@ final class VirtualThread extends BaseVirtualThread { /** * Creates the default ForkJoinPool scheduler. */ - @SuppressWarnings("removal") private static ForkJoinPool createDefaultScheduler() { - ForkJoinWorkerThreadFactory factory = pool -> { - PrivilegedAction pa = () -> new CarrierThread(pool); - return AccessController.doPrivileged(pa); - }; - PrivilegedAction pa = () -> { - int parallelism, maxPoolSize, minRunnable; - String parallelismValue = System.getProperty("jdk.virtualThreadScheduler.parallelism"); - String maxPoolSizeValue = System.getProperty("jdk.virtualThreadScheduler.maxPoolSize"); - String minRunnableValue = System.getProperty("jdk.virtualThreadScheduler.minRunnable"); - if (parallelismValue != null) { - parallelism = Integer.parseInt(parallelismValue); - } else { - parallelism = Runtime.getRuntime().availableProcessors(); - } - if (maxPoolSizeValue != null) { - maxPoolSize = Integer.parseInt(maxPoolSizeValue); - parallelism = Integer.min(parallelism, maxPoolSize); - } else { - maxPoolSize = Integer.max(parallelism, 256); - } - if (minRunnableValue != null) { - minRunnable = Integer.parseInt(minRunnableValue); - } else { - minRunnable = Integer.max(parallelism / 2, 1); - } - Thread.UncaughtExceptionHandler handler = (t, e) -> { }; - boolean asyncMode = true; // FIFO - return new ForkJoinPool(parallelism, factory, handler, asyncMode, - 0, maxPoolSize, minRunnable, pool -> true, 30, SECONDS); - }; - return AccessController.doPrivileged(pa); + ForkJoinWorkerThreadFactory factory = pool -> new CarrierThread(pool); + int parallelism, maxPoolSize, minRunnable; + String parallelismValue = System.getProperty("jdk.virtualThreadScheduler.parallelism"); + String maxPoolSizeValue = System.getProperty("jdk.virtualThreadScheduler.maxPoolSize"); + String minRunnableValue = System.getProperty("jdk.virtualThreadScheduler.minRunnable"); + if (parallelismValue != null) { + parallelism = Integer.parseInt(parallelismValue); + } else { + parallelism = Runtime.getRuntime().availableProcessors(); + } + if (maxPoolSizeValue != null) { + maxPoolSize = Integer.parseInt(maxPoolSizeValue); + parallelism = Integer.min(parallelism, maxPoolSize); + } else { + maxPoolSize = Integer.max(parallelism, 256); + } + if (minRunnableValue != null) { + minRunnable = Integer.parseInt(minRunnableValue); + } else { + minRunnable = Integer.max(parallelism / 2, 1); + } + Thread.UncaughtExceptionHandler handler = (t, e) -> { }; + boolean asyncMode = true; // FIFO + return new ForkJoinPool(parallelism, factory, handler, asyncMode, + 0, maxPoolSize, minRunnable, pool -> true, 30, SECONDS); } /** @@ -1458,7 +1447,7 @@ final class VirtualThread extends BaseVirtualThread { */ private static ScheduledExecutorService[] createDelayedTaskSchedulers() { String propName = "jdk.virtualThreadScheduler.timerQueues"; - String propValue = GetPropertyAction.privilegedGetProperty(propName); + String propValue = System.getProperty(propName); int queueCount; if (propValue != null) { queueCount = Integer.parseInt(propValue); diff --git a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java index 84647cc5b90..80f4dfdf2aa 100644 --- a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java +++ b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java @@ -144,12 +144,6 @@ public interface JavaLangAccess { */ void registerShutdownHook(int slot, boolean registerShutdownInProgress, Runnable hook); - /** - * Returns a new Thread with the given Runnable and an - * inherited AccessControlContext. - */ - Thread newThreadWithAcc(Runnable target, @SuppressWarnings("removal") AccessControlContext acc); - /** * Invokes the finalize method of the given object. */ diff --git a/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java b/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java index 9a479b0e61e..b314b1823a5 100644 --- a/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java +++ b/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java @@ -25,8 +25,6 @@ package jdk.internal.misc; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinWorkerThread; import jdk.internal.access.JavaLangAccess; @@ -114,17 +112,12 @@ public class CarrierThread extends ForkJoinWorkerThread { /** * The thread group for the carrier threads. */ - @SuppressWarnings("removal") private static ThreadGroup carrierThreadGroup() { - return AccessController.doPrivileged(new PrivilegedAction() { - public ThreadGroup run() { - ThreadGroup group = JLA.currentCarrierThread().getThreadGroup(); - for (ThreadGroup p; (p = group.getParent()) != null; ) - group = p; - var carrierThreadsGroup = new ThreadGroup(group, "CarrierThreads"); - return carrierThreadsGroup; - } - }); + ThreadGroup group = JLA.currentCarrierThread().getThreadGroup(); + for (ThreadGroup p; (p = group.getParent()) != null; ) + group = p; + var carrierThreadsGroup = new ThreadGroup(group, "CarrierThreads"); + return carrierThreadsGroup; } /** diff --git a/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java b/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java index f2b1b85e2a1..ca2fcf11e99 100644 --- a/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java +++ b/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java @@ -25,10 +25,6 @@ package jdk.internal.misc; -import java.security.AccessControlContext; -import java.security.AccessController; -import java.security.ProtectionDomain; -import java.security.PrivilegedAction; import java.util.concurrent.atomic.AtomicInteger; /** @@ -69,18 +65,8 @@ public final class InnocuousThread extends Thread { * set to the given priority. */ public static Thread newThread(String name, Runnable target, int priority) { - if (System.getSecurityManager() == null) { - return createThread(name, target, 0L, - ClassLoader.getSystemClassLoader(), priority); - } - return AccessController.doPrivileged( - new PrivilegedAction() { - @Override - public Thread run() { - return createThread(name, target, 0L, - ClassLoader.getSystemClassLoader(), priority); - } - }); + return createThread(name, target, 0L, + ClassLoader.getSystemClassLoader(), priority); } /** @@ -103,17 +89,7 @@ public final class InnocuousThread extends Thread { * Thread priority is set to the given priority. */ public static Thread newSystemThread(String name, Runnable target, int priority) { - if (System.getSecurityManager() == null) { - return createThread(name, target, 0L, null, priority); - } - return AccessController.doPrivileged( - new PrivilegedAction() { - @Override - public Thread run() { - return createThread(name, target, 0L, - null, priority); - } - }); + return createThread(name, target, 0L, null, priority); } /** @@ -122,17 +98,7 @@ public final class InnocuousThread extends Thread { */ public static Thread newSystemThread(String name, Runnable target, long stackSize, int priority) { - if (System.getSecurityManager() == null) { - return createThread(name, target, stackSize, null, priority); - } - return AccessController.doPrivileged( - new PrivilegedAction() { - @Override - public Thread run() { - return createThread(name, target, 0L, - null, priority); - } - }); + return createThread(name, target, stackSize, null, priority); } private static Thread createThread(String name, Runnable target, long stackSize, @@ -207,18 +173,7 @@ public final class InnocuousThread extends Thread { break; group = parent; } - final ThreadGroup root = group; - if (System.getSecurityManager() == null) { - INNOCUOUSTHREADGROUP = new ThreadGroup(root, "InnocuousThreadGroup"); - } else { - INNOCUOUSTHREADGROUP = AccessController.doPrivileged( - new PrivilegedAction() { - @Override - public ThreadGroup run() { - return new ThreadGroup(root, "InnocuousThreadGroup"); - } - }); - } + INNOCUOUSTHREADGROUP = new ThreadGroup(group, "InnocuousThreadGroup"); } catch (Exception e) { throw new Error(e); } diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index fc5e235313c..f3b62c37fa8 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -165,7 +165,6 @@ module java.base { java.desktop, java.logging, java.management, - java.naming, java.rmi, jdk.charsets, jdk.jartool, diff --git a/src/java.naming/share/classes/com/sun/jndi/ldap/VersionHelper.java b/src/java.naming/share/classes/com/sun/jndi/ldap/VersionHelper.java index 1d7565e00e3..53a20b99594 100644 --- a/src/java.naming/share/classes/com/sun/jndi/ldap/VersionHelper.java +++ b/src/java.naming/share/classes/com/sun/jndi/ldap/VersionHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,6 @@ package com.sun.jndi.ldap; -import jdk.internal.access.SharedSecrets; - import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -109,14 +107,8 @@ public final class VersionHelper { return Class.forName(className, true, getContextClassLoader()); } - @SuppressWarnings("removal") Thread createThread(Runnable r) { - AccessControlContext acc = AccessController.getContext(); - // 4290486: doPrivileged is needed to create a thread in - // an environment that restricts "modifyThreadGroup". - PrivilegedAction act = - () -> SharedSecrets.getJavaLangAccess().newThreadWithAcc(r, acc); - return AccessController.doPrivileged(act); + return new Thread(r); } @SuppressWarnings("removal") diff --git a/test/jdk/jdk/internal/reflect/CallerSensitive/CheckCSMs.java b/test/jdk/jdk/internal/reflect/CallerSensitive/CheckCSMs.java index 6dff95000f0..ee4d2021b87 100644 --- a/test/jdk/jdk/internal/reflect/CallerSensitive/CheckCSMs.java +++ b/test/jdk/jdk/internal/reflect/CallerSensitive/CheckCSMs.java @@ -73,7 +73,6 @@ public class CheckCSMs { Set.of("java/io/ObjectStreamField#getType ()Ljava/lang/Class;", "java/lang/Runtime#load (Ljava/lang/String;)V", "java/lang/Runtime#loadLibrary (Ljava/lang/String;)V", - "java/lang/Thread#getContextClassLoader ()Ljava/lang/ClassLoader;", "javax/sql/rowset/serial/SerialJavaObject#getFields ()[Ljava/lang/reflect/Field;" ); @@ -81,7 +80,6 @@ public class CheckCSMs { // methods that takes an additional caller class parameter. private static Set UNSUPPORTED_VIRTUAL_METHODS = Set.of("java/io/ObjectStreamField#getType (Ljava/lang/Class;)Ljava/lang/Class;", - "java/lang/Thread#getContextClassLoader (Ljava/lang/Class;)Ljava/lang/ClassLoader;", "javax/sql/rowset/serial/SerialJavaObject#getFields (Ljava/lang/Class;)[Ljava/lang/reflect/Field;" );