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

ghudson at mit.edu ghudson at mit.edu
Mon Nov 9 12:01:35 EST 2026


https://github.com/krb5/krb5/commit/10192728aab5f5743df5fb0a71fa86165dc5d6a8
commit 10192728aab5f5743df5fb0a71fa86165dc5d6a8
Author: Greg Hudson <ghudson at mit.edu>
Date:   Sat Oct 17 10:50:28 2026 -0400

    Fix leak on error in xdr_krb5_keyblock()
    
    In xdr_krb5_keyblock(), if xdr_bytes() fails, still assign cp back to
    objp->contents to avoid leaking a potential allocation.
    
    (cherry picked from commit 893576ef054c7f136b1601cdea7d47ce18442ae0)
    
    ticket: 9261
    version_fixed: 1.22.3

 src/lib/kadm5/kadm_rpc_xdr.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/lib/kadm5/kadm_rpc_xdr.c b/src/lib/kadm5/kadm_rpc_xdr.c
index 9387eba06..2ece69c58 100644
--- a/src/lib/kadm5/kadm_rpc_xdr.c
+++ b/src/lib/kadm5/kadm_rpc_xdr.c
@@ -1156,16 +1156,16 @@ bool_t
 xdr_krb5_keyblock(XDR *xdrs, krb5_keyblock *objp)
 {
    char *cp;
+   bool_t r;
 
    /* XXX This only works because free_keyblock assumes ->contents
       is allocated by malloc() */
    if(!xdr_krb5_enctype(xdrs, &objp->enctype))
       return FALSE;
    cp = (char *)objp->contents;
-   if (!xdr_bytes(xdrs, &cp, &objp->length, GSSRPC_MAX_ELEMENT_SIZE))
-      return FALSE;
+   r = xdr_bytes(xdrs, &cp, &objp->length, GSSRPC_MAX_ELEMENT_SIZE);
    objp->contents = (uint8_t *)cp;
-   return TRUE;
+   return r;
 }
 
 bool_t


More information about the cvs-krb5 mailing list