Defer sending a KeyUpdate until after pending writes are complete
authorMatt Caswell <matt@openssl.org>
Wed, 17 Apr 2019 10:09:05 +0000 (11:09 +0100)
committerMatt Caswell <matt@openssl.org>
Mon, 3 Jun 2019 10:57:31 +0000 (11:57 +0100)
commit6c2f347c78a530407b5310497080810094427920
tree55453627b31bb6cb6c111de1bc465a708e5c50b7
parentd63d841fb510a920275c66d3e486089c5c718797
Defer sending a KeyUpdate until after pending writes are complete

If we receive a KeyUpdate message (update requested) from the peer while
we are in the middle of a write, we should defer sending the responding
KeyUpdate message until after the current write is complete. We do this
by waiting to send the KeyUpdate until the next time we write and there is
no pending write data.

This does imply a subtle change in behaviour. Firstly the responding
KeyUpdate message won't be sent straight away as it is now. Secondly if
the peer sends multiple KeyUpdates without us doing any writing then we
will only send one response, as opposed to previously where we sent a
response for each KeyUpdate received.

Fixes #8677

Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/8773)

(cherry picked from commit feb9e31c40c49de6384dd0413685e9b5a15adc99)
ssl/record/rec_layer_s3.c
ssl/statem/statem_clnt.c
ssl/statem/statem_lib.c
ssl/statem/statem_srvr.c