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; }