[RFR] 8184328: JDK8u131 socketRead0 hang at SSL read

Xuelei Fan xuelei.fan at oracle.com
Wed Sep 13 12:52:30 UTC 2017


In theory, there are intermittent compatibility problems as this update 
may not close the SSL connection over the existing socket layer 
gracefully, even for high speed networking environments, while the 
underlying socket is alive.  The impact could be serious in some 
environment.

For safe, I may suggest turn this countermeasure off by default.  And 
providing options to turn on this countermeasure:
1. Close the SSL connection gracefully by default; or
2. Close the SSL connection after a timeout.

It's hardly to say 5 times receiving timeout is better/safer than 
timeout once in this context.  As you have already had a system property 
to control, you may be able to use options other than the customized 
socket receiving timeout, so that the closing timeout is not 
mixed/confused/dependent on/with the receiving timeout.

Put all together:
1. define a closing timeout, for example "jdk.tls.waitForClose".
2. the property default value is zero, no behavior changes.
3. applications can set positive milliseconds value for the property. 
The SSL connection will be closed in the set milliseconds (or about the 
maximum value between SO_TIMEOUT and closing timeout), the connection is 
not grant to be gracefully.

What do you think?

BTW, please file a CSR as this update is introducing an external system 
property.

Thanks,
Xuelei

On 9/11/2017 3:29 PM, Rob McKenna wrote:
> Hi folks,
> 
> In high latency environments a client SSLSocket with autoClose set to false
> can hang indefinitely if it does not correctly recieve a close_notify
> from the server.
> 
> In order to rectify this situation I would like to suggest that we
> implement an integer JDK property (jdk.tls.closeRetries) which instructs
> waitForClose to attempt the close no more times than the value of the
> property. I would also suggest that 5 is a reasonable default.
> 
> Note: each attempt times out based on the value of
> Socket.setSoTimeout(int timeout).
> 
> Also, the behaviour here is similar to that of waitForClose() when
> autoClose is set to true, less the retries.
> 
> http://cr.openjdk.java.net/~robm/8184328/webrev.01/
> 
>      -Rob
> 


More information about the security-dev mailing list