From 32476957ead4151dceaf873306fc7e79cd262812 Mon Sep 17 00:00:00 2001 From: Niels Dossche Date: Mon, 28 Oct 2024 16:34:55 +0100 Subject: Fix potential memory leak in BIO_get_accept_socket() When BIO_parse_hostserv() fails it may still have allocated memory, yet this memory is not freed. Fix it by jumping to the err label. Reviewed-by: Viktor Dukhovni Reviewed-by: David von Oheimb Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/25817) --- crypto/bio/bio_addr.c | 7 ++++++- crypto/bio/bio_sock.c | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crypto/bio/bio_addr.c b/crypto/bio/bio_addr.c index 4b2cef6936..568c0b4a1f 100644 --- a/crypto/bio/bio_addr.c +++ b/crypto/bio/bio_addr.c @@ -571,8 +571,13 @@ int BIO_parse_hostserv(const char *hostserv, char **host, char **service, *service = NULL; } else { *service = OPENSSL_strndup(p, pl); - if (*service == NULL) + if (*service == NULL) { + if (h != NULL && host != NULL) { + OPENSSL_free(*host); + *host = NULL; + } return 0; + } } } diff --git a/crypto/bio/bio_sock.c b/crypto/bio/bio_sock.c index 3ea122e2b9..22dbf38b00 100644 --- a/crypto/bio/bio_sock.c +++ b/crypto/bio/bio_sock.c @@ -259,7 +259,7 @@ int BIO_get_accept_socket(char *host, int bind_mode) return INVALID_SOCKET; if (BIO_sock_init() != 1) - return INVALID_SOCKET; + goto err; if (BIO_lookup(h, p, BIO_LOOKUP_SERVER, AF_UNSPEC, SOCK_STREAM, &res) != 0) goto err; -- cgit v1.2.3