]> 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:37:27 +0000 (13:37 +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)

(cherry picked from commit 38690cab18de88198f46478565fab423cf534efa)

ssl/record/methods/tls_common.c

index b7481c071f74616d16123192e08f41070a0c8f3f..01cf3012b8c2cbf167fe3e8ec8ddaf30f8917f0a 100644 (file)
@@ -2124,7 +2124,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);