Disallow SSL_key_update() if there are writes pending
authorMatt Caswell <matt@openssl.org>
Tue, 13 Jul 2021 16:44:44 +0000 (17:44 +0100)
committerTomas Mraz <tomas@openssl.org>
Fri, 16 Jul 2021 10:20:20 +0000 (12:20 +0200)
If an application is halfway through writing application data it should
not be allowed to attempt an SSL_key_update() operation. Instead the
SSL_write() operation should be completed.

Fixes #12485

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16077)

ssl/ssl_lib.c

index c1e8e41f02bc68581a110323c3e444cc6cd1bc6b..892a417d935437196b8cd352e8875271aef1005f 100644 (file)
@@ -2262,6 +2262,11 @@ int SSL_key_update(SSL *s, int updatetype)
         return 0;
     }
 
+    if (RECORD_LAYER_write_pending(&s->rlayer)) {
+        ERR_raise(ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY);
+        return 0;
+    }
+
     ossl_statem_set_in_init(s, 1);
     s->key_update = updatetype;
     return 1;