From b43d2fde51a9d32e752d57173e0ef4b806d6bfbe Mon Sep 17 00:00:00 2001 From: jsing <> Date: Mon, 21 Jan 2019 10:24:25 +0000 Subject: Correct some rwstate handling that I broke when refactoring. --- src/lib/libssl/tls13_lib.c | 16 +++++++++++++--- 1 file 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 @@ -/* $OpenBSD: tls13_lib.c,v 1.1 2019/01/21 09:10:58 jsing Exp $ */ +/* $OpenBSD: tls13_lib.c,v 1.2 2019/01/21 10:24:25 jsing Exp $ */ /* * Copyright (c) 2018, 2019 Joel Sing * @@ -71,6 +71,8 @@ tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len) return TLS13_IO_FAILURE; } + ssl->internal->rwstate = SSL_READING; + if ((n = BIO_read(ssl->rbio, buf, len)) <= 0) { if (BIO_should_read(ssl->rbio)) return TLS13_IO_WANT_POLLIN; @@ -80,6 +82,9 @@ tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len) return TLS13_IO_FAILURE; } + if (n == len) + ssl->internal->rwstate = SSL_NOTHING; + return n; } @@ -101,6 +106,8 @@ tls13_legacy_wire_write(SSL *ssl, const uint8_t *buf, size_t len) return TLS13_IO_FAILURE; } + ssl->internal->rwstate = SSL_WRITING; + if ((n = BIO_write(ssl->wbio, buf, len)) <= 0) { if (BIO_should_read(ssl->wbio)) return TLS13_IO_WANT_POLLIN; @@ -110,6 +117,9 @@ tls13_legacy_wire_write(SSL *ssl, const uint8_t *buf, size_t len) return TLS13_IO_FAILURE; } + if (n == len) + ssl->internal->rwstate = SSL_NOTHING; + return n; } @@ -124,8 +134,6 @@ tls13_legacy_wire_write_cb(const void *buf, size_t n, void *arg) static int tls13_legacy_return_code(SSL *ssl, ssize_t ret) { - ssl->internal->rwstate = SSL_NOTHING; - if (ret > INT_MAX) { SSLerror(ssl, ERR_R_INTERNAL_ERROR); return -1; @@ -135,6 +143,8 @@ tls13_legacy_return_code(SSL *ssl, ssize_t ret) if (ret > 0) return ret; + ssl->internal->rwstate = SSL_NOTHING; + switch (ret) { case TLS13_IO_EOF: return 0; -- cgit v1.2.3-55-g6feb