# HG changeset patch # User alanb # Date 1549702442 0 # Node ID 52bc6427720116bb1dd342cb2c806ffd5a4bab6f # Parent 1d423d38840dfc971992cbaa7db94cdc85f3d7d7 Privileged block to create socket input/output streams should be in AbstractPlainSocketImpl diff -r 1d423d38840d -r 52bc64277201 src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java --- a/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java Sat Feb 09 07:56:40 2019 +0000 +++ b/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java Sat Feb 09 08:54:02 2019 +0000 @@ -30,6 +30,9 @@ import java.io.InputStream; import java.io.OutputStream; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -470,8 +473,14 @@ throw new IOException("Socket Closed"); if (shut_rd) throw new IOException("Socket input is shutdown"); - if (socketInputStream == null) - socketInputStream = new SocketInputStream(this); + if (socketInputStream == null) { + PrivilegedExceptionAction pa = () -> new SocketInputStream(this); + try { + socketInputStream = AccessController.doPrivileged(pa); + } catch (PrivilegedActionException e) { + throw (IOException) e.getCause(); + } + } } return socketInputStream; } @@ -489,8 +498,14 @@ throw new IOException("Socket Closed"); if (shut_wr) throw new IOException("Socket output is shutdown"); - if (socketOutputStream == null) - socketOutputStream = new SocketOutputStream(this); + if (socketOutputStream == null) { + PrivilegedExceptionAction pa = () -> new SocketOutputStream(this); + try { + socketOutputStream = AccessController.doPrivileged(pa); + } catch (PrivilegedActionException e) { + throw (IOException) e.getCause(); + } + } } return socketOutputStream; } diff -r 1d423d38840d -r 52bc64277201 src/java.base/share/classes/java/net/Socket.java --- a/src/java.base/share/classes/java/net/Socket.java Sat Feb 09 07:56:40 2019 +0000 +++ b/src/java.base/share/classes/java/net/Socket.java Sat Feb 09 08:54:02 2019 +0000 @@ -27,15 +27,13 @@ import java.io.InputStream; import java.io.OutputStream; -import java.io.FileDescriptor; import java.io.IOException; import java.nio.channels.SocketChannel; import java.security.AccessController; -import java.security.PrivilegedExceptionAction; import java.security.PrivilegedAction; import java.util.Set; import java.util.Collections; -import sun.nio.ch.NioSocketImpl; + import static java.net.SocketImpl.getDefaultSocketImpl; /** @@ -142,7 +140,7 @@ } impl = type == Proxy.Type.SOCKS ? new SocksSocketImpl(p, getDefaultSocketImpl(false)) - : new HttpConnectSocketImpl(p, getDefaultSocketImpl(false)); + : new HttpConnectSocketImpl(p, getDefaultSocketImpl(false)); impl.setSocket(this); } else { if (p == Proxy.NO_PROXY) { @@ -925,19 +923,7 @@ if (isInputShutdown()) throw new SocketException("Socket input is shutdown"); // wrap the input stream so that the close method closes this socket - InputStream is = null; - try { - is = AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public InputStream run() throws IOException { - return impl.getInputStream(); - } - }); - } catch (java.security.PrivilegedActionException e) { - throw (IOException) e.getException(); - } - - return new SocketInputStream(this, is); + return new SocketInputStream(this, impl.getInputStream()); } private static class SocketInputStream extends InputStream { @@ -993,18 +979,7 @@ if (isOutputShutdown()) throw new SocketException("Socket output is shutdown"); // wrap the output stream so that the close method closes this socket - OutputStream os = null; - try { - os = AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public OutputStream run() throws IOException { - return impl.getOutputStream(); - } - }); - } catch (java.security.PrivilegedActionException e) { - throw (IOException) e.getException(); - } - return new SocketOutputStream(this, os); + return new SocketOutputStream(this, impl.getOutputStream()); } private static class SocketOutputStream extends OutputStream {