summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libssl/tls13_lib.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index a9d83d709a..c4cce26ca5 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.1 2019/01/21 09:10:58 jsing Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.2 2019/01/21 10:24:25 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -71,6 +71,8 @@ tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len)
71 return TLS13_IO_FAILURE; 71 return TLS13_IO_FAILURE;
72 } 72 }
73 73
74 ssl->internal->rwstate = SSL_READING;
75
74 if ((n = BIO_read(ssl->rbio, buf, len)) <= 0) { 76 if ((n = BIO_read(ssl->rbio, buf, len)) <= 0) {
75 if (BIO_should_read(ssl->rbio)) 77 if (BIO_should_read(ssl->rbio))
76 return TLS13_IO_WANT_POLLIN; 78 return TLS13_IO_WANT_POLLIN;
@@ -80,6 +82,9 @@ tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len)
80 return TLS13_IO_FAILURE; 82 return TLS13_IO_FAILURE;
81 } 83 }
82 84
85 if (n == len)
86 ssl->internal->rwstate = SSL_NOTHING;
87
83 return n; 88 return n;
84} 89}
85 90
@@ -101,6 +106,8 @@ tls13_legacy_wire_write(SSL *ssl, const uint8_t *buf, size_t len)
101 return TLS13_IO_FAILURE; 106 return TLS13_IO_FAILURE;
102 } 107 }
103 108
109 ssl->internal->rwstate = SSL_WRITING;
110
104 if ((n = BIO_write(ssl->wbio, buf, len)) <= 0) { 111 if ((n = BIO_write(ssl->wbio, buf, len)) <= 0) {
105 if (BIO_should_read(ssl->wbio)) 112 if (BIO_should_read(ssl->wbio))
106 return TLS13_IO_WANT_POLLIN; 113 return TLS13_IO_WANT_POLLIN;
@@ -110,6 +117,9 @@ tls13_legacy_wire_write(SSL *ssl, const uint8_t *buf, size_t len)
110 return TLS13_IO_FAILURE; 117 return TLS13_IO_FAILURE;
111 } 118 }
112 119
120 if (n == len)
121 ssl->internal->rwstate = SSL_NOTHING;
122
113 return n; 123 return n;
114} 124}
115 125
@@ -124,8 +134,6 @@ tls13_legacy_wire_write_cb(const void *buf, size_t n, void *arg)
124static int 134static int
125tls13_legacy_return_code(SSL *ssl, ssize_t ret) 135tls13_legacy_return_code(SSL *ssl, ssize_t ret)
126{ 136{
127 ssl->internal->rwstate = SSL_NOTHING;
128
129 if (ret > INT_MAX) { 137 if (ret > INT_MAX) {
130 SSLerror(ssl, ERR_R_INTERNAL_ERROR); 138 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
131 return -1; 139 return -1;
@@ -135,6 +143,8 @@ tls13_legacy_return_code(SSL *ssl, ssize_t ret)
135 if (ret > 0) 143 if (ret > 0)
136 return ret; 144 return ret;
137 145
146 ssl->internal->rwstate = SSL_NOTHING;
147
138 switch (ret) { 148 switch (ret) {
139 case TLS13_IO_EOF: 149 case TLS13_IO_EOF:
140 return 0; 150 return 0;