krb5 commit: Fix memory leak parsing invalid FILE keytab entry

ghudson at mit.edu ghudson at mit.edu
Thu Jul 9 20:38:02 EDT 2026


https://github.com/krb5/krb5/commit/37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
commit 37638e5a7cb6f507f7c9e9b61abb7f5189e804f3
Author: Arthur Chan <arthur.chan at 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 at 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;
 }
 


More information about the cvs-krb5 mailing list