Author: remm Date: Fri Jul 7 16:35:26 2017 New Revision: 1801195 URL: http://svn.apache.org/viewvc?rev=1801195&view=rev Log: Fix some bad sync in OpenSSLEngine, any async use of the ssl pointer could cause a crash. It shouldn't happen as the engine is not directly accessible, but the cost is very low.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java?rev=1801195&r1=1801194&r2=1801195&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java Fri Jul 7 16:35:26 2017 @@ -677,7 +677,10 @@ public final class OpenSSLEngine extends } @Override - public String[] getEnabledCipherSuites() { + public synchronized String[] getEnabledCipherSuites() { + if (destroyed) { + return new String[0]; + } String[] enabled = SSL.getCiphers(ssl); if (enabled == null) { return new String[0]; @@ -693,10 +696,13 @@ public final class OpenSSLEngine extends } @Override - public void setEnabledCipherSuites(String[] cipherSuites) { + public synchronized void setEnabledCipherSuites(String[] cipherSuites) { if (cipherSuites == null) { throw new IllegalArgumentException(sm.getString("engine.nullCipherSuite")); } + if (destroyed) { + return; + } final StringBuilder buf = new StringBuilder(); for (String cipherSuite : cipherSuites) { if (cipherSuite == null) { @@ -733,7 +739,10 @@ public final class OpenSSLEngine extends } @Override - public String[] getEnabledProtocols() { + public synchronized String[] getEnabledProtocols() { + if (destroyed) { + return new String[0]; + } List<String> enabled = new ArrayList<>(); // Seems like there is no way to explicitly disable SSLv2Hello in OpenSSL so it is always enabled enabled.add(Constants.SSL_PROTO_SSLv2Hello); @@ -762,11 +771,14 @@ public final class OpenSSLEngine extends } @Override - public void setEnabledProtocols(String[] protocols) { + public synchronized void setEnabledProtocols(String[] protocols) { if (protocols == null) { // This is correct from the API docs throw new IllegalArgumentException(); } + if (destroyed) { + return; + } boolean sslv2 = false; boolean sslv3 = false; boolean tlsv1 = false; @@ -1252,12 +1264,12 @@ public final class OpenSSLEngine extends @Override public String getCipherSuite() { - if (!handshakeFinished) { - return INVALID_CIPHER; - } if (cipher == null) { String ciphers; synchronized (OpenSSLEngine.this) { + if (!handshakeFinished) { + return INVALID_CIPHER; + } if (destroyed) { return INVALID_CIPHER; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org