summaryrefslogtreecommitdiffstats
path: root/lib/libssl/tls13_lib.c
diff options
context:
space:
mode:
authorjsing <jsing@openbsd.org>2019-02-23 15:00:44 +0000
committerjsing <jsing@openbsd.org>2019-02-23 15:00:44 +0000
commit6e76079173619971ef6a0714ee99b1f3e9c97bb1 (patch)
tree8081e2f5b2a9e5929ef6fb0bfa5db24e5e969d24 /lib/libssl/tls13_lib.c
parentCorrect comment on delete_addresses() return value. (diff)
downloadwireguard-openbsd-6e76079173619971ef6a0714ee99b1f3e9c97bb1.tar.xz
wireguard-openbsd-6e76079173619971ef6a0714ee99b1f3e9c97bb1.zip
Set BIO retry on TLS13_IO_WANT_POLLIN/TLS13_IO_WANT_POLLOUT.
In most cases a TLS13_IO_WANT_POLLIN or TLS13_IO_WANT_POLLOUT will have bubbled up from the wire callbacks, in which case the BIO retry flag will already be set. However, if we return TLS13_IO_WANT_POLLIN or TLS13_IO_WANT_POLLOUT from a higher layer the BIO retry flag will not be set and that will cause SSL_get_error() to return SSL_ERROR_SYSCALL rather than the intended SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE. ok beck@ tb@
Diffstat (limited to 'lib/libssl/tls13_lib.c')
-rw-r--r--lib/libssl/tls13_lib.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/libssl/tls13_lib.c b/lib/libssl/tls13_lib.c
index f9505fa4385..d8a22c8fc7b 100644
--- a/lib/libssl/tls13_lib.c
+++ b/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tls13_lib.c,v 1.4 2019/02/21 17:15:00 jsing Exp $ */
+/* $OpenBSD: tls13_lib.c,v 1.5 2019/02/23 15:00:44 jsing Exp $ */
/*
* Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
*
@@ -219,10 +219,12 @@ tls13_legacy_return_code(SSL *ssl, ssize_t ret)
return -1;
case TLS13_IO_WANT_POLLIN:
+ BIO_set_retry_read(ssl->rbio);
ssl->internal->rwstate = SSL_READING;
return -1;
case TLS13_IO_WANT_POLLOUT:
+ BIO_set_retry_write(ssl->wbio);
ssl->internal->rwstate = SSL_WRITING;
return -1;
}