diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/tls13_lib.c | 16 |
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) | |||
| 124 | static int | 134 | static int |
| 125 | tls13_legacy_return_code(SSL *ssl, ssize_t ret) | 135 | tls13_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; |
