From: Matt Caswell Date: Tue, 18 Mar 2025 12:05:08 +0000 (+0000) Subject: Don't decrement the unreleased counter if we failed to release a record X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ad45969b028dbf2521fa42ea463978402b3584b;p=thirdparty%2Fopenssl.git Don't decrement the unreleased counter if we failed to release a record In a failure situation we may incorrectly decrement the amount of data released. Only decrement the counter if we successfully released. Reviewed-by: Neil Horman Reviewed-by: Tim Hudson Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/27091) --- diff --git a/ssl/quic/quic_tls.c b/ssl/quic/quic_tls.c index a48ee923dac..0ed227ff894 100644 --- a/ssl/quic/quic_tls.c +++ b/ssl/quic/quic_tls.c @@ -423,18 +423,15 @@ static int quic_release_record(OSSL_RECORD_LAYER *rl, void *rechandle, return OSSL_RECORD_RETURN_FATAL; } - rl->recunreleased -= length; - - if (rl->recunreleased > 0) - return OSSL_RECORD_RETURN_SUCCESS; - - if (!rl->qtls->args.crypto_release_rcd_cb(rl->recread, - rl->qtls->args.crypto_release_rcd_cb_arg)) { - QUIC_TLS_FATAL(rl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return OSSL_RECORD_RETURN_FATAL; + if (rl->recunreleased == length) { + if (!rl->qtls->args.crypto_release_rcd_cb(rl->recread, + rl->qtls->args.crypto_release_rcd_cb_arg)) { + QUIC_TLS_FATAL(rl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); + return OSSL_RECORD_RETURN_FATAL; + } + rl->recread = 0; } - - rl->recread = 0; + rl->recunreleased -= length; return OSSL_RECORD_RETURN_SUCCESS; }