diff options
author | Matt Caswell <matt@openssl.org> | 2021-11-11 16:59:43 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2021-11-15 14:51:19 +0000 |
commit | ce287b72e49a2b064550508631d638124f85e693 (patch) | |
tree | de2a1f3161a6914ff1bce233d7cb43bd4b360e78 /ssl | |
parent | 45838e536c08c74e68536501d6dc2ef9f4d499da (diff) |
Reset the rwstate before calling ASYNC_start_job()
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)
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/ssl_lib.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index ffd0a0bc6d..9c411a3293 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -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: |