From 0a0bf32935ebf0150e6781dafb42f15873ff2c1e Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Mon, 7 Sep 2020 21:53:30 -0500 Subject: [PATCH] krb5: Fix leak in gethostlist() --- lib/krb5/krbhst.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/krb5/krbhst.c b/lib/krb5/krbhst.c index 45ba6052b..2e3535bdc 100644 --- a/lib/krb5/krbhst.c +++ b/lib/krb5/krbhst.c @@ -1088,24 +1088,25 @@ gethostlist(krb5_context context, const char *realm, if (ret) return ret; - while(krb5_krbhst_next(context, handle, &hostinfo) == 0) + while (krb5_krbhst_next(context, handle, &hostinfo) == 0) nhost++; - if(nhost == 0) { + if (nhost == 0) { krb5_set_error_message(context, KRB5_KDC_UNREACH, N_("No KDC found for realm %s", ""), realm); + krb5_krbhst_free(context, handle); return KRB5_KDC_UNREACH; } *hostlist = calloc(nhost + 1, sizeof(**hostlist)); - if(*hostlist == NULL) { + if (*hostlist == NULL) { krb5_krbhst_free(context, handle); return krb5_enomem(context); } krb5_krbhst_reset(context, handle); nhost = 0; - while(krb5_krbhst_next_as_string(context, handle, - host, sizeof(host)) == 0) { - if(((*hostlist)[nhost++] = strdup(host)) == NULL) { + while (krb5_krbhst_next_as_string(context, handle, + host, sizeof(host)) == 0) { + if (((*hostlist)[nhost++] = strdup(host)) == NULL) { krb5_free_krbhst(context, *hostlist); krb5_krbhst_free(context, handle); return krb5_enomem(context);