diff options
author | jsing <> | 2019-01-21 10:24:25 +0000 |
---|---|---|
committer | jsing <> | 2019-01-21 10:24:25 +0000 |
commit | b43d2fde51a9d32e752d57173e0ef4b806d6bfbe (patch) | |
tree | 3596d275c16d6ebaba36fbdfeb904cab098e9508 | |
parent | 3ef5fc080daaeca210db9bb6c0ec9e6cc0ca6b04 (diff) | |
download | openbsd-b43d2fde51a9d32e752d57173e0ef4b806d6bfbe.tar.gz openbsd-b43d2fde51a9d32e752d57173e0ef4b806d6bfbe.tar.bz2 openbsd-b43d2fde51a9d32e752d57173e0ef4b806d6bfbe.zip |
Correct some rwstate handling that I broke when refactoring.
-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; |