# HG changeset patch # User redestad # Date 1562943290 -7200 # Fri Jul 12 16:54:50 2019 +0200 # Node ID c60759e6c468005910c4385b586ffa53608205a4 # Parent 1346086863a360db9361be10603e47e6155e156e 8227587: Add internal privileged System.loadLibrary Reviewed-by: rriggs diff --git a/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java b/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java --- a/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -26,9 +26,6 @@ package sun.nio.fs; -import java.security.AccessController; -import java.security.PrivilegedAction; - /** * AIX specific system calls. */ @@ -46,11 +43,8 @@ private static native void init(); static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(AixNativeDispatcher.class, "nio"); init(); } } diff --git a/src/java.base/linux/classes/sun/nio/fs/LinuxNativeDispatcher.java b/src/java.base/linux/classes/sun/nio/fs/LinuxNativeDispatcher.java --- a/src/java.base/linux/classes/sun/nio/fs/LinuxNativeDispatcher.java +++ b/src/java.base/linux/classes/sun/nio/fs/LinuxNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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,9 +25,6 @@ package sun.nio.fs; -import java.security.AccessController; -import java.security.PrivilegedAction; - /** * Linux specific system calls. */ @@ -121,11 +118,8 @@ private static native void init(); static { - AccessController.doPrivileged(new PrivilegedAction<>() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(LinuxNativeDispatcher.class, "nio"); init(); } } diff --git a/src/java.base/linux/classes/sun/nio/fs/LinuxWatchService.java b/src/java.base/linux/classes/sun/nio/fs/LinuxWatchService.java --- a/src/java.base/linux/classes/sun/nio/fs/LinuxWatchService.java +++ b/src/java.base/linux/classes/sun/nio/fs/LinuxWatchService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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 @@ -26,8 +26,6 @@ package sun.nio.fs; import java.nio.file.*; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.*; import java.io.IOException; import jdk.internal.misc.Unsafe; @@ -459,10 +457,7 @@ private static native int poll(int fd1, int fd2) throws UnixException; static { - AccessController.doPrivileged(new PrivilegedAction<>() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(LinuxWatchService.class, "nio"); } } diff --git a/src/java.base/macosx/classes/apple/security/KeychainStore.java b/src/java.base/macosx/classes/apple/security/KeychainStore.java --- a/src/java.base/macosx/classes/apple/security/KeychainStore.java +++ b/src/java.base/macosx/classes/apple/security/KeychainStore.java @@ -105,13 +105,8 @@ private static final Debug debug = Debug.getInstance("keystore"); static { - AccessController.doPrivileged( - new PrivilegedAction() { - public Void run() { - System.loadLibrary("osxsecurity"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess().loadLibrary( + KeychainStore.class, "osxsecurity"); try { PKCS8ShroudedKeyBag_OID = new ObjectIdentifier(keyBag); pbeWithSHAAnd3KeyTripleDESCBC_OID = new ObjectIdentifier(pbeWithSHAAnd3KeyTripleDESCBC); diff --git a/src/java.base/macosx/classes/sun/nio/fs/UTIFileTypeDetector.java b/src/java.base/macosx/classes/sun/nio/fs/UTIFileTypeDetector.java --- a/src/java.base/macosx/classes/sun/nio/fs/UTIFileTypeDetector.java +++ b/src/java.base/macosx/classes/sun/nio/fs/UTIFileTypeDetector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019, 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 @@ -27,8 +27,6 @@ import java.io.IOException; import java.nio.file.Path; -import java.security.AccessController; -import java.security.PrivilegedAction; /** * File type detector that uses a file extension to look up its MIME type @@ -55,12 +53,7 @@ } static { - AccessController.doPrivileged(new PrivilegedAction<>() { - @Override - public Void run() { - System.loadLibrary("nio"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(UTIFileTypeDispatcher.class, "nio"); } } diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -2274,6 +2274,30 @@ public void setCause(Throwable t, Throwable cause) { t.setCause(cause); } + + public void loadLibrary(Class klass, String library) { + assert library.indexOf(java.io.File.separatorChar) < 0 && classStackWalker().getCallerClass() == klass; + if (System.getSecurityManager() == null) { + ClassLoader.loadLibrary(klass, library, false); + } else { + AccessController.doPrivileged( + new java.security.PrivilegedAction<>() { + public Void run() { + ClassLoader.loadLibrary(klass, library, false); + return null; + } + }); + } + } + + private StackWalker classStackWalker() { + return AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public StackWalker run() { + return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); + } + }); + } }); } } diff --git a/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java b/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java --- a/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java +++ b/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java @@ -67,13 +67,8 @@ * Load net library into runtime. */ static { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(AbstractPlainDatagramSocketImpl.class, "net"); } private static volatile boolean checkedReusePort; diff --git a/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java b/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java --- a/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java +++ b/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java @@ -94,13 +94,8 @@ * Load net library into runtime. */ static { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(AbstractPlainSocketImpl.class, "net"); } private static volatile boolean checkedReusePort; diff --git a/src/java.base/share/classes/java/net/DatagramPacket.java b/src/java.base/share/classes/java/net/DatagramPacket.java --- a/src/java.base/share/classes/java/net/DatagramPacket.java +++ b/src/java.base/share/classes/java/net/DatagramPacket.java @@ -46,13 +46,8 @@ * Perform class initialization */ static { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(DatagramPacket.class, "net"); init(); } diff --git a/src/java.base/share/classes/java/net/InetAddress.java b/src/java.base/share/classes/java/net/InetAddress.java --- a/src/java.base/share/classes/java/net/InetAddress.java +++ b/src/java.base/share/classes/java/net/InetAddress.java @@ -317,13 +317,8 @@ } else { preferIPv6Address = PREFER_IPV4_VALUE; } - AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(InetAddress.class, "net"); SharedSecrets.setJavaNetInetAddressAccess( new JavaNetInetAddressAccess() { public String getOriginalHostName(InetAddress ia) { diff --git a/src/java.base/share/classes/java/net/NetworkInterface.java b/src/java.base/share/classes/java/net/NetworkInterface.java --- a/src/java.base/share/classes/java/net/NetworkInterface.java +++ b/src/java.base/share/classes/java/net/NetworkInterface.java @@ -28,7 +28,6 @@ import java.util.Arrays; import java.util.Enumeration; import java.util.NoSuchElementException; -import java.security.AccessController; import java.util.Spliterator; import java.util.Spliterators; import java.util.stream.Stream; @@ -57,13 +56,8 @@ private static final int defaultIndex; /* index of defaultInterface */ static { - AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(NetworkInterface.class, "net"); init(); defaultInterface = DefaultInterface.getDefault(); diff --git a/src/java.base/share/classes/java/util/zip/ZipUtils.java b/src/java.base/share/classes/java/util/zip/ZipUtils.java --- a/src/java.base/share/classes/java/util/zip/ZipUtils.java +++ b/src/java.base/share/classes/java/util/zip/ZipUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2019, 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 @@ -27,8 +27,6 @@ import java.nio.ByteBuffer; import java.nio.file.attribute.FileTime; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.time.DateTimeException; import java.time.Instant; import java.time.LocalDateTime; @@ -278,13 +276,8 @@ * Loads zip native library, if not already laoded */ static void loadLibrary() { - SecurityManager sm = System.getSecurityManager(); - if (sm == null) { - System.loadLibrary("zip"); - } else { - PrivilegedAction pa = () -> { System.loadLibrary("zip"); return null; }; - AccessController.doPrivileged(pa); - } + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(ZipUtils.class, "zip"); } private static final Unsafe unsafe = Unsafe.getUnsafe(); diff --git a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java --- a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java +++ b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 @@ -311,4 +311,12 @@ * @param cause set t's cause to new value */ void setCause(Throwable t, Throwable cause); + + /** + * Privileged System.loadLibrary + * + * @param klass on whoms behalf to load the library + * @param library name of the library to load + */ + void loadLibrary(Class klass, String library); } diff --git a/src/java.base/share/classes/sun/net/sdp/SdpSupport.java b/src/java.base/share/classes/sun/net/sdp/SdpSupport.java --- a/src/java.base/share/classes/sun/net/sdp/SdpSupport.java +++ b/src/java.base/share/classes/sun/net/sdp/SdpSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2019, 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 @@ -27,7 +27,6 @@ import java.io.IOException; import java.io.FileDescriptor; -import java.security.AccessController; import jdk.internal.access.SharedSecrets; import jdk.internal.access.JavaIOFileDescriptorAccess; @@ -75,12 +74,7 @@ private static native void convert0(int fd) throws IOException; static { - AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + SharedSecrets.getJavaLangAccess() + .loadLibrary(SdpSupport.class, "net"); } } diff --git a/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java b/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java --- a/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java +++ b/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 @@ -98,13 +98,8 @@ return NetProperties.getBoolean(key); }}); if (b != null && b.booleanValue()) { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(DefaultProxySelector.class, "net"); hasSystemProxies = init(); } } diff --git a/src/java.base/share/classes/sun/nio/ch/IOUtil.java b/src/java.base/share/classes/sun/nio/ch/IOUtil.java --- a/src/java.base/share/classes/sun/nio/ch/IOUtil.java +++ b/src/java.base/share/classes/sun/nio/ch/IOUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, 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 @@ -432,15 +432,8 @@ public static void load() { } static { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Void run() { - System.loadLibrary("net"); - System.loadLibrary("nio"); - return null; - } - }); - + jdk.internal.access.SharedSecrets.getJavaLangAccess().loadLibrary(IOUtil.class, "net"); + jdk.internal.access.SharedSecrets.getJavaLangAccess().loadLibrary(IOUtil.class, "nio"); initIDs(); IOV_MAX = iovMax(); diff --git a/src/java.base/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java b/src/java.base/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java --- a/src/java.base/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java +++ b/src/java.base/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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,9 +25,6 @@ package sun.nio.fs; -import java.security.AccessController; -import java.security.PrivilegedAction; - /** * Solaris specific system calls. */ @@ -52,11 +49,8 @@ private static native void init(); static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess()i + .loadLibrary(SolarisNativeDispatcher.class, "nio"); init(); } } diff --git a/src/java.base/solaris/classes/sun/nio/fs/SolarisWatchService.java b/src/java.base/solaris/classes/sun/nio/fs/SolarisWatchService.java --- a/src/java.base/solaris/classes/sun/nio/fs/SolarisWatchService.java +++ b/src/java.base/solaris/classes/sun/nio/fs/SolarisWatchService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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 @@ -26,8 +26,6 @@ package sun.nio.fs; import java.nio.file.*; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.*; import java.io.IOException; import jdk.internal.misc.Unsafe; @@ -817,11 +815,8 @@ throws UnixException; static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(SolarisWatchService.class, "nio"); init(); } } diff --git a/src/java.base/unix/classes/sun/net/PortConfig.java b/src/java.base/unix/classes/sun/net/PortConfig.java --- a/src/java.base/unix/classes/sun/net/PortConfig.java +++ b/src/java.base/unix/classes/sun/net/PortConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2019, 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,7 +25,7 @@ package sun.net; -import java.security.AccessController; +import sun.security.action.GetPropertyAction; /** * Determines the ephemeral port range in use on this system. @@ -41,35 +41,30 @@ private PortConfig() {} static { - AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - String os = System.getProperty("os.name"); - if (os.startsWith("Linux")) { - defaultLower = 32768; - defaultUpper = 61000; - } else if (os.startsWith("SunOS")) { - defaultLower = 32768; - defaultUpper = 65535; - } else if (os.contains("OS X")) { - defaultLower = 49152; - defaultUpper = 65535; - } else if (os.startsWith("AIX")) { - // The ephemeral port is OS version dependent on AIX: - // http://publib.boulder.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.rsct315.admin/bl503_ephport.htm - // However, on AIX 5.3 / 6.1 / 7.1 we always see the - // settings below by using: - // /usr/sbin/no -a | fgrep ephemeral - defaultLower = 32768; - defaultUpper = 65535; - } else { - throw new InternalError( - "sun.net.PortConfig: unknown OS"); - } - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(PortConfig.class, "net"); + String os = GetPropertyAction.privilegedGetProperty("os.name"); + if (os.startsWith("Linux")) { + defaultLower = 32768; + defaultUpper = 61000; + } else if (os.startsWith("SunOS")) { + defaultLower = 32768; + defaultUpper = 65535; + } else if (os.contains("OS X")) { + defaultLower = 49152; + defaultUpper = 65535; + } else if (os.startsWith("AIX")) { + // The ephemeral port is OS version dependent on AIX: + // http://publib.boulder.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.rsct315.admin/bl503_ephport.htm + // However, on AIX 5.3 / 6.1 / 7.1 we always see the + // settings below by using: + // /usr/sbin/no -a | fgrep ephemeral + defaultLower = 32768; + defaultUpper = 65535; + } else { + throw new InternalError( + "sun.net.PortConfig: unknown OS"); + } int v = getLower0(); if (v == -1) { diff --git a/src/java.base/unix/classes/sun/net/dns/ResolverConfigurationImpl.java b/src/java.base/unix/classes/sun/net/dns/ResolverConfigurationImpl.java --- a/src/java.base/unix/classes/sun/net/dns/ResolverConfigurationImpl.java +++ b/src/java.base/unix/classes/sun/net/dns/ResolverConfigurationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2019, 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 @@ -259,13 +259,8 @@ static native String fallbackDomain0(); static { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction<>() { - public Void run() { - System.loadLibrary("net"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(ResolverConfigurationImpl.class, "net"); } } diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixCopyFile.java b/src/java.base/unix/classes/sun/nio/fs/UnixCopyFile.java --- a/src/java.base/unix/classes/sun/nio/fs/UnixCopyFile.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixCopyFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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 @@ -33,8 +33,6 @@ import java.nio.file.LinkOption; import java.nio.file.LinkPermission; import java.nio.file.StandardCopyOption; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -628,12 +626,8 @@ throws UnixException; static { - AccessController.doPrivileged(new PrivilegedAction<>() { - @Override - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(UnixCopyFile.class, "nio"); } } diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java --- a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java @@ -25,9 +25,6 @@ package sun.nio.fs; -import java.security.AccessController; -import java.security.PrivilegedAction; - /** * Unix system and library calls. */ @@ -630,11 +627,8 @@ private static native int init(); static { - AccessController.doPrivileged(new PrivilegedAction<>() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(UnixNativeDispatcher.class, "nio"); capabilities = init(); } } diff --git a/src/java.base/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java b/src/java.base/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java --- a/src/java.base/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java +++ b/src/java.base/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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 @@ -27,8 +27,6 @@ import java.nio.file.*; import java.io.IOException; -import java.security.AccessController; -import java.security.PrivilegedAction; /** * File type detector that does lookup of file extension using Windows Registry. @@ -70,13 +68,9 @@ private static native String queryStringValue(long subKey, long name); static { - AccessController.doPrivileged(new PrivilegedAction() { - @Override - public Void run() { - // nio.dll has dependency on net.dll - System.loadLibrary("net"); - System.loadLibrary("nio"); - return null; - }}); + // nio.dll has dependency on net.dll + var jla = jdk.internal.access.SharedSecrets.getJavaLangAccess() + jla.loadLibrary(RegistryFileTypeDetector.class, "net"); + jla.loadLibrary(RegistryFileTypeDetector.class, "nio"); } } diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java b/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java --- a/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java @@ -25,8 +25,6 @@ package sun.nio.fs; -import java.security.AccessController; -import java.security.PrivilegedAction; import jdk.internal.misc.Unsafe; import static sun.nio.fs.WindowsConstants.*; @@ -1153,13 +1151,11 @@ private static native void initIDs(); static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - // nio.dll has dependency on net.dll - System.loadLibrary("net"); - System.loadLibrary("nio"); - return null; - }}); + // nio.dll has dependency on net.dll + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(WindowsNativeDispatcher.class, "net"); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(WindowsNativeDispatcher.class, "nio"); initIDs(); } diff --git a/src/jdk.net/linux/classes/jdk/net/LinuxSocketOptions.java b/src/jdk.net/linux/classes/jdk/net/LinuxSocketOptions.java --- a/src/jdk.net/linux/classes/jdk/net/LinuxSocketOptions.java +++ b/src/jdk.net/linux/classes/jdk/net/LinuxSocketOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, 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 @@ -95,9 +95,7 @@ private static native boolean keepAliveOptionsSupported0(); private static native boolean quickAckSupported0(); static { - AccessController.doPrivileged((PrivilegedAction) () -> { - System.loadLibrary("extnet"); - return null; - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(LinuxSocketOptions.class, "extnet"); } -} \ No newline at end of file +} diff --git a/src/jdk.net/macosx/classes/jdk/net/MacOSXSocketOptions.java b/src/jdk.net/macosx/classes/jdk/net/MacOSXSocketOptions.java --- a/src/jdk.net/macosx/classes/jdk/net/MacOSXSocketOptions.java +++ b/src/jdk.net/macosx/classes/jdk/net/MacOSXSocketOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, 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 jdk.net; import java.net.SocketException; -import java.security.AccessController; -import java.security.PrivilegedAction; import jdk.net.ExtendedSocketOptions.PlatformSocketOptions; class MacOSXSocketOptions extends PlatformSocketOptions { @@ -77,9 +75,7 @@ private static native int getTcpKeepAliveIntvl0(int fd) throws SocketException; private static native boolean keepAliveOptionsSupported0(); static { - AccessController.doPrivileged((PrivilegedAction) () -> { - System.loadLibrary("extnet"); - return null; - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(MacOSXSocketOptions.class, "extnet"); } } diff --git a/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java b/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java --- a/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java +++ b/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2019, 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 @@ -26,8 +26,6 @@ package jdk.net; import java.net.SocketException; -import java.security.AccessController; -import java.security.PrivilegedAction; import jdk.net.ExtendedSocketOptions.PlatformSocketOptions; class SolarisSocketOptions extends PlatformSocketOptions { @@ -45,12 +43,8 @@ private static native void init(); static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - System.loadLibrary("extnet"); - return null; - } - }); + jdk.internal.access.SharedSecrets.getJavaLangAccess() + .loadLibrary(SolarisSocketOptions.class, "extnet"); init(); } }