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

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

krb5 commit: Fix memory leak parsing invalid FILE keytab entry

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Thu Jul 9 20:38:09 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20260710003802.758481055D5@krbdev.mit.edu>
Date: Thu,  9 Jul 2026 20:38:02 -0400 (EDT)
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/37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
commit 37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
Author: Arthur Chan <arthur.chan@adalogics.com>
Date:   Tue Jun 23 18:48:06 2026 +0100

    Fix memory leak parsing invalid FILE keytab entry
    
    Use krb5_free_principal() to free ret_entry->principal on error;
    otherwise we could leak the realm on error.
    
    [ghudson@mit.edu: used k5alloc; simplified cleanup code; rewrote
    commit message]

 src/lib/krb5/keytab/kt_file.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/src/lib/krb5/keytab/kt_file.c b/src/lib/krb5/keytab/kt_file.c
index 993f902c7..00fb072d9 100644
--- a/src/lib/krb5/keytab/kt_file.c
+++ b/src/lib/krb5/keytab/kt_file.c
@@ -948,7 +948,7 @@ krb5_ktfileint_internal_read_entry(krb5_context context, krb5_keytab id, krb5_ke
     }
     if (!count || (count < 0))
         return KRB5_KT_END;
-    ret_entry->principal = (krb5_principal)malloc(sizeof(krb5_principal_data));
+    ret_entry->principal = k5alloc(sizeof(*ret_entry->principal), &error);
     if (!ret_entry->principal)
         return ENOMEM;
 
@@ -1105,13 +1105,9 @@ krb5_ktfileint_internal_read_entry(krb5_context context, krb5_keytab id, krb5_ke
 
     return 0;
 fail:
-
-    for (i = 0; i < ret_entry->principal->length; i++)
-        free(ret_entry->principal->data[i].data);
-    free(ret_entry->principal->data);
-    ret_entry->principal->data = 0;
-    free(ret_entry->principal);
-    ret_entry->principal = 0;
+    krb5_free_principal(context, ret_entry->principal);
+    free(ret_entry->key.contents);
+    memset(ret_entry, 0, sizeof(*ret_entry));
     return error;
 }
 
_______________________________________________
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