[31668] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit [krb5-1.22]: Fix leak on error in xdr_krb5_principal()

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Mon Nov 9 12:01:47 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261109170144.57F2E105839@krbdev.mit.edu>
Date: Mon,  9 Nov 2026 12:01:44 -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/ed90f4a64ce87be98b89a0e62374df0aed64d700
commit ed90f4a64ce87be98b89a0e62374df0aed64d700
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]
    
    (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
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post