krb5 commit: Fix memory leak parsing invalid FILE keytab entry

[email protected] Thu, 9 Jul 2026 20:38:02 -0400 (EDT)
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
commit 37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
Author: Arthur Chan <[email protected]>
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.
    
    [[email protected]: 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;
 }