File gnutls-PSK-hash-fix-memleak.patch of Package gnutls.42640

From a29aa9cda32d3ab0de137d3815536db4b4289599 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@gnu.org>
Date: Thu, 21 Aug 2025 07:03:38 +0900
Subject: [PATCH 601/713] pre_shared_key: fix memleak when retrying with
 different binder algo

As the PSK entry is reallocated, free it upon retry. Also use
_gnutls_free_key_datum instead of _gnutls_free_temp_key_datum
consistently.

Signed-off-by: Daiki Ueno <ueno@gnu.org>

Index: gnutls-3.8.3/lib/ext/pre_shared_key.c
===================================================================
--- gnutls-3.8.3.orig/lib/ext/pre_shared_key.c
+++ gnutls-3.8.3/lib/ext/pre_shared_key.c
@@ -785,8 +785,8 @@ cleanup:
 	if (free_username)
 		_gnutls_free_datum(&username);
 
-	_gnutls_free_temp_key_datum(&user_key);
-	_gnutls_free_temp_key_datum(&rkey);
+	_gnutls_free_key_datum(&user_key);
+	_gnutls_free_key_datum(&rkey);
 
 	return ret;
 }
@@ -926,11 +926,11 @@ retry_binder:
 
 				ret = derive_ipsk(prf, &psk.identity, &key,
 						  ipsk);
-				_gnutls_free_temp_key_datum(&key);
 				if (ret < 0) {
 					gnutls_assert();
 					goto fail;
 				}
+				_gnutls_free_key_datum(&key);
 				ret = _gnutls_set_datum(&key, ipsk,
 							prf->output_size);
 				zeroize_key(ipsk, sizeof(ipsk));
@@ -986,6 +986,7 @@ retry_binder:
 		if (pskcred && pskcred->binder_algo == NULL &&
 		    mac == GNUTLS_MAC_SHA384) {
 			mac = GNUTLS_MAC_SHA256;
+			_gnutls_free_key_datum(&key);
 			goto retry_binder;
 		}
 		gnutls_assert();
@@ -1086,7 +1087,7 @@ retry_binder:
 	}
 
 fail:
-	_gnutls_free_datum(&key);
+	_gnutls_free_key_datum(&key);
 	return ret;
 }
 
openSUSE Build Service is sponsored by