krb5 commit [krb5-1.22]: Fix leak on error in xdr_krb5_principal()
ghudson at mit.edu
ghudson at mit.edu
Mon Nov 9 12:01:44 EST 2026
https://github.com/krb5/krb5/commit/ed90f4a64ce87be98b89a0e62374df0aed64d700
commit ed90f4a64ce87be98b89a0e62374df0aed64d700
Author: Julien Rische <jrische at 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 at mit.edu: rewrote commit message; made cleanup free() call
unconditional]
(cherry picked from commit 6dc4b8d2febd4de33314efbf2ef7cb171af763e8)
ticket: 9262
version_fixed: 1.22.3
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
More information about the cvs-krb5
mailing list