Skip to content
Commit 8e8ec665 authored by Kenny Root's avatar Kenny Root
Browse files

Retry sending record split fragment when SSL write fails

When the write size was exactly SSL3_RT_MAX_PLAIN_LENGTH+1 and record
splitting is needed, an extra byte would be added to the max size of the
message to be written. This would cause the requested size to not exceed
the max. If the SSL_WANT_WRITE error were returned, the next packet
would not get the extra byte added to the max packet size since
record_split_done is set. Since a different set of arguments
(SSL3_RT_MAX_PLAIN_LENGTH+1 vs SSL3_RT_MAX_PLAIN_LENGTH) would be passed
to do_ssl3_write, it would get an "SSL3_WRITE_PENDING:bad write retry"
error.

To avoid a failure in the opposite direction, the max variable increment
is removed as well. This can happen when SSL_MODE_ENABLE_PARTIAL_WRITE
is not enabled, the call to ssl3_write_bytes contains, e.g., buffer of
2*SSL3_RT_MAX_PLAIN_LENGTH where the first call into do_ssl3_write
succeeds writing the first SSL3_RT_MAX_PLAIN_LENGTH bytes, but the
writing the second SSL3_RT_MAX_PLAIN_LENGTH bytes fails. This means the
first time the the second section of SSL3_RT_MAX_PLAIN_LENGTH bytes has
called do_ssl3_write with "max" bytes, but next call to ssl3_write_bytes
in turn calls into do_ssl3_write with "max+1" bytes.

(cherry picked from commit 455e02af)

Bug: 16482963
Change-Id: I28a515a970d535a7fbba9c0ba325c9aed633d1cc
parent 79a629e8
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment