]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Only free the read buffers if we're not using them
authorMatt Caswell <matt@openssl.org>
Tue, 23 Apr 2024 15:34:46 +0000 (16:34 +0100)
committerMatt Caswell <matt@openssl.org>
Tue, 28 May 2024 12:28:13 +0000 (13:28 +0100)
If we're part way through processing a record, or the application has
not released all the records then we should not free our buffer because
they are still needed.

CVE-2024-4741

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24395)

ssl/record/methods/tls_common.c

index bf6dc0d1f55c63f133b9ce079258f45d9bd0d4a9..88ce83fab12f724f9c868b177a12c8afb8a6edb0 100644 (file)
@@ -2129,7 +2129,10 @@ int tls_free_buffers(OSSL_RECORD_LAYER *rl)
     /* Read direction */
 
     /* If we have pending data to be read then fail */
-    if (rl->curr_rec < rl->num_recs || TLS_BUFFER_get_left(&rl->rbuf) != 0)
+    if (rl->curr_rec < rl->num_recs
+            || rl->curr_rec != rl->num_released
+            || TLS_BUFFER_get_left(&rl->rbuf) != 0
+            || rl->rstate == SSL_ST_READ_BODY)
         return 0;
 
     return tls_release_read_buffer(rl);