]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Reset the rwstate before calling ASYNC_start_job()
authorMatt Caswell <matt@openssl.org>
Thu, 11 Nov 2021 16:59:43 +0000 (16:59 +0000)
committerMatt Caswell <matt@openssl.org>
Mon, 15 Nov 2021 14:51:19 +0000 (14:51 +0000)
If an async job pauses while processing a TLS connection then the
rwstate gets set to SSL_ASYNC_PAUSED. When resuming the job we should
reset the rwstate back to SSL_NOTHING. In fact we can do this
unconditionally since if we're about to call ASYNC_start_job() then either
we are about to start the async job for the first time (in which case the
rwstate should already by SSL_NOTHING), or we are restarting it after a
pause (in which case reseting it to SSL_NOTHING is the correct action).

Fixes #16809

Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17013)

(cherry picked from commit 07f620e3acf0dd76a3a03ada9911c544aa483aa7)

ssl/ssl_lib.c

index ffd0a0bc6d1763b71f1648d88cc2e32922d39c0a..9c411a3293962372715b0028f8a6cde772a91cfa 100644 (file)
@@ -1684,6 +1684,8 @@ static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
         if (s->waitctx == NULL)
             return -1;
     }
+
+    s->rwstate = SSL_NOTHING;
     switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args,
                             sizeof(struct ssl_async_args))) {
     case ASYNC_ERR: