From: Amir Mohammadi Date: Wed, 5 Jun 2024 18:56:19 +0000 (+0330) Subject: Fix memory leak in quic_trace.c X-Git-Tag: openssl-3.4.0-alpha1~488 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1977c00f00ad0546421a5ec0b40c1326aee4cddb;p=thirdparty%2Fopenssl.git Fix memory leak in quic_trace.c Fixes #24340 Reviewed-by: Ben Kaduk Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/24568) --- diff --git a/ssl/quic/quic_trace.c b/ssl/quic/quic_trace.c index 5a6d79bf4bb..c2ffdac9733 100644 --- a/ssl/quic/quic_trace.c +++ b/ssl/quic/quic_trace.c @@ -79,20 +79,21 @@ static int frame_ack(BIO *bio, PACKET *pkt) OSSL_QUIC_ACK_RANGE *ack_ranges = NULL; uint64_t total_ranges = 0; uint64_t i; + int ret = 0; if (!ossl_quic_wire_peek_frame_ack_num_ranges(pkt, &total_ranges) /* In case sizeof(uint64_t) > sizeof(size_t) */ || total_ranges > SIZE_MAX / sizeof(ack_ranges[0]) || (ack_ranges = OPENSSL_zalloc(sizeof(ack_ranges[0]) * (size_t)total_ranges)) == NULL) - return 0; + return ret; ack.ack_ranges = ack_ranges; ack.num_ack_ranges = (size_t)total_ranges; /* Ack delay exponent is 0, so we can get the raw delay time below */ if (!ossl_quic_wire_decode_frame_ack(pkt, 0, &ack, NULL)) - return 0; + goto end; BIO_printf(bio, " Largest acked: %llu\n", (unsigned long long)ack.ack_ranges[0].end); @@ -112,8 +113,10 @@ static int frame_ack(BIO *bio, PACKET *pkt) - ack.ack_ranges[i].start)); } + ret = 1; +end: OPENSSL_free(ack_ranges); - return 1; + return ret; } static int frame_reset_stream(BIO *bio, PACKET *pkt)