8000 Fix AccessControlException in GlobalEventExecutor (#14743) · netty/netty@8f9eadb · GitHub
[go: up one dir, main page]

Skip to content

Commit 8f9eadb

Browse files
authored
Fix AccessControlException in GlobalEventExecutor (#14743)
Motivation: fix recently introduced (as part of #14623) `java.security.AccessControlException`, here is the relevant stack trace ``` java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader") at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:488) ~[?:?] at java.base/java.security.AccessController.checkPermission(AccessController.java:1085) ~[?:?] at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:411) ~[?:?] at java.base/java.lang.ClassLoader.checkClassLoaderPermission(ClassLoader.java:2071) ~[?:?] at java.base/java.lang.Thread.getContextClassLoader(Thread.java:2284) ~[?:?] at io.netty.util.concurrent.GlobalEventExecutor.startThread(GlobalEventExecutor.java:239) ~[netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.GlobalEventExecutor.execute0(GlobalEventExecutor.java:232) ~[netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.GlobalEventExecutor.execute(GlobalEventExecutor.java:226) ~[netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:862) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:500) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:97) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:1059) [netty-common-4.1.117.Final.jar:4.1.117.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.117.Final.jar:4.1.117.Final] at java.base/java.lang.Thread.run(Thread.java:1575) [?:?] ``` Modification: Apply `AccessController.doPrivileged` block Result: With the proper security policy, the exception is gone Affected Version: 4.1.117.Final --------- Signed-off-by: Andriy Redko <andriy.redko@aiven.io>
1 parent 6fcd3e6 commit 8f9eadb

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

common/src/main/java/io/netty/util/concurrent/GlobalEventExecutor.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,13 @@ private void execute0(@Schedule Runnable task) {
235235

236236
private void startThread() {
237237
if (started.compareAndSet(false, true)) {
238-
Thread callingThread = Thread.currentThread();
239-
ClassLoader parentCCL = callingThread.getContextClassLoader();
238+
final Thread callingThread = Thread.currentThread();
239+
ClassLoader parentCCL = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
240+
@Override
241+
public ClassLoader run() {
242+
return callingThread.getContextClassLoader();
243+
}
244+
});
240245
// Avoid calling classloader leaking through Thread.inheritedAccessControlContext.
241246
setContextClassLoader(callingThread, null);
242247
try {

0 commit comments

Comments
 (0)
0