[31638] in CVS-changelog-for-Kerberos-V5
krb5 commit: Fix leak on error in xdr_krb5_principal()
daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Mon Nov 9 11:58:29 2026
From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261109165824.E993A105814@krbdev.mit.edu>
Date: Mon, 9 Nov 2026 11:58:24 -0500 (EST)
MIME-Version: 1.0
Reply-To: krbdev@mit.edu
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu
https://github.com/krb5/krb5/commit/6dc4b8d2febd4de33314efbf2ef7cb171af763e8
commit 6dc4b8d2febd4de33314efbf2ef7cb171af763e8
Author: Julien Rische <jrische@redhat.com>
Date: Fri Sep 4 11:43:23 2026 +0200
Fix leak on error in xdr_krb5_principal()
In xdr_krb5_principal(), use a cleanup handler to ensure that the
result of krb5_unparse_name() or xdr_nullstring() is freed.
[ghudson@mit.edu: rewrote commit message; made cleanup free() call
unconditional]
ticket: 9262 (new)
tags: pullup
target_version: 1.22-next
src/lib/kadm5/kadm_rpc_xdr.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/lib/kadm5/kadm_rpc_xdr.c b/src/lib/kadm5/kadm_rpc_xdr.c
index 2ece69c58..64e2ed91c 100644
--- a/src/lib/kadm5/kadm_rpc_xdr.c
+++ b/src/lib/kadm5/kadm_rpc_xdr.c
@@ -1089,33 +1089,32 @@ xdr_krb5_principal(XDR *xdrs, krb5_principal *objp)
char *p = NULL;
krb5_principal pr = NULL;
static krb5_context context = NULL;
+ bool_t success = FALSE;
/* using a static context here is ugly, but should work
ok, and the other solutions are even uglier */
if (!context &&
kadm5_init_krb5_context(&context))
- return(FALSE);
+ goto cleanup;
switch(xdrs->x_op) {
case XDR_ENCODE:
if (*objp) {
if((ret = krb5_unparse_name(context, *objp, &p)) != 0)
- return FALSE;
+ goto cleanup;
}
if(!xdr_nullstring(xdrs, &p))
- return FALSE;
- if (p) free(p);
+ goto cleanup;
break;
case XDR_DECODE:
if(!xdr_nullstring(xdrs, &p))
- return FALSE;
+ goto cleanup;
if (p) {
ret = krb5_parse_name(context, p, &pr);
if(ret != 0)
- return FALSE;
+ goto cleanup;
*objp = pr;
- free(p);
} else
*objp = NULL;
break;
@@ -1125,7 +1124,11 @@ xdr_krb5_principal(XDR *xdrs, krb5_principal *objp)
*objp = NULL;
break;
}
- return TRUE;
+ success = TRUE;
+
+cleanup:
+ free(p);
+ return success;
}
bool_t
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5