[RFR] 8184328: JDK8u131 socketRead0 hang at SSL read

Xuelei Fan xuelei.fan at oracle.com
Wed Sep 13 12:54:34 UTC 2017



On 9/13/2017 5:52 AM, Xuelei Fan wrote:
> 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.
> 
typo and missed, "not granted to be closed 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