From: Matt Caswell Date: Fri, 22 Jul 2022 13:30:53 +0000 (+0100) Subject: Move SSL_MODE_RELEASE_BUFFERS into the read record layer X-Git-Tag: openssl-3.2.0-alpha1~2210 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3de7695928478bce22dcf6bf87883688d895dc43;p=thirdparty%2Fopenssl.git Move SSL_MODE_RELEASE_BUFFERS into the read record layer This resolves an outstanding "TODO" item. Reviewed-by: Hugo Landau Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/18132) --- diff --git a/ssl/record/methods/tls_common.c b/ssl/record/methods/tls_common.c index 4c999c52e83..34497f4cc05 100644 --- a/ssl/record/methods/tls_common.c +++ b/ssl/record/methods/tls_common.c @@ -298,7 +298,7 @@ int tls_default_read_n(OSSL_RECORD_LAYER *rl, size_t n, size_t max, int extend, if (ret <= OSSL_RECORD_RETURN_RETRY) { rb->left = left; - if (rl->mode & SSL_MODE_RELEASE_BUFFERS && !rl->isdtls) + if ((rl->mode & SSL_MODE_RELEASE_BUFFERS) != 0 && !rl->isdtls) if (len + left == 0) rlayer_release_read_buffer(rl); return ret; @@ -990,6 +990,11 @@ int tls_release_record(OSSL_RECORD_LAYER *rl, void *rechandle) rl->num_released++; + if (rl->curr_rec == rl->num_released + && (rl->mode & SSL_MODE_RELEASE_BUFFERS) != 0 + && SSL3_BUFFER_get_left(&rl->rbuf) == 0) + rlayer_release_read_buffer(rl); + return OSSL_RECORD_RETURN_SUCCESS; } diff --git a/ssl/record/rec_layer_s3.c b/ssl/record/rec_layer_s3.c index e41c3a1698b..16247031bb1 100644 --- a/ssl/record/rec_layer_s3.c +++ b/ssl/record/rec_layer_s3.c @@ -1368,13 +1368,6 @@ int ssl3_read_bytes(SSL *ssl, int type, int *recvd_type, unsigned char *buf, /* We must have read empty records. Get more data */ goto start; } - /* TODO(RECLAYER): FIX ME */ -#if 0 - if (!peek && curr_rec == s->rlayer.num_recs - && (s->mode & SSL_MODE_RELEASE_BUFFERS) - && SSL3_BUFFER_get_left(rbuf) == 0) - ssl3_release_read_buffer(s); -#endif *readbytes = totalbytes; return 1; }