2020-02-26 19:03:57

by Steve Dickson

[permalink] [raw]
Subject: [PATCH] gssd: Use krb5_free_string() instead of free()

Commit ae9e9760 plugged up some memory leaks
by freeing memory via free(2). The proper
way to free memory that has been allocated by
krb5 functions is with krb5_free_string()

Signed-off-by: Steve Dickson <[email protected]>
---
utils/gssd/krb5_util.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c
index 85f60ae..8c73748 100644
--- a/utils/gssd/krb5_util.c
+++ b/utils/gssd/krb5_util.c
@@ -484,7 +484,7 @@ gssd_get_single_krb5_cred(krb5_context context,
if (ccache)
krb5_cc_close(context, ccache);
krb5_free_cred_contents(context, &my_creds);
- free(k5err);
+ krb5_free_string(context, k5err);
return (code);
}

@@ -723,7 +723,7 @@ gssd_search_krb5_keytab(krb5_context context, krb5_keytab kt,
"we failed to unparse principal name: %s\n",
k5err);
k5_free_kt_entry(context, kte);
- free(k5err);
+ krb5_free_string(context, k5err);
k5err = NULL;
continue;
}
@@ -770,7 +770,7 @@ gssd_search_krb5_keytab(krb5_context context, krb5_keytab kt,
if (retval < 0)
retval = 0;
out:
- free(k5err);
+ krb5_free_string(context, k5err);
return retval;
}

@@ -927,7 +927,7 @@ find_keytab_entry(krb5_context context, krb5_keytab kt,
k5err = gssd_k5_err_msg(context, code);
printerr(1, "%s while building principal for '%s'\n",
k5err, spn);
- free(k5err);
+ krb5_free_string(context, k5err);
k5err = NULL;
continue;
}
@@ -937,7 +937,7 @@ find_keytab_entry(krb5_context context, krb5_keytab kt,
k5err = gssd_k5_err_msg(context, code);
printerr(3, "%s while getting keytab entry for '%s'\n",
k5err, spn);
- free(k5err);
+ krb5_free_string(context, k5err);
k5err = NULL;
/*
* We tried the active directory machine account
@@ -986,7 +986,7 @@ out:
k5_free_default_realm(context, default_realm);
if (realmnames)
krb5_free_host_realm(context, realmnames);
- free(k5err);
+ krb5_free_string(context, k5err);
return retval;
}

@@ -1249,7 +1249,7 @@ gssd_destroy_krb5_machine_creds(void)
printerr(0, "WARNING: %s while resolving credential "
"cache '%s' for destruction\n", k5err,
ple->ccname);
- free(k5err);
+ krb5_free_string(context, k5err);
k5err = NULL;
continue;
}
@@ -1258,13 +1258,13 @@ gssd_destroy_krb5_machine_creds(void)
k5err = gssd_k5_err_msg(context, code);
printerr(0, "WARNING: %s while destroying credential "
"cache '%s'\n", k5err, ple->ccname);
- free(k5err);
+ krb5_free_string(context, k5err);
k5err = NULL;
}
}
krb5_free_context(context);
out:
- free(k5err);
+ krb5_free_string(context, k5err);
}

/*
@@ -1347,7 +1347,7 @@ out_free_kt:
out_free_context:
krb5_free_context(context);
out:
- free(k5err);
+ krb5_free_string(context, k5err);
return retval;
}

--
2.24.1


2020-02-27 15:45:55

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] gssd: Use krb5_free_string() instead of free()



On 2/26/20 2:02 PM, Steve Dickson wrote:
> Commit ae9e9760 plugged up some memory leaks
> by freeing memory via free(2). The proper
> way to free memory that has been allocated by
> krb5 functions is with krb5_free_string()
>
> Signed-off-by: Steve Dickson <[email protected]>
Committed... (tag: nfs-utils-2-4-4-rc1)

steved.
> ---
> utils/gssd/krb5_util.c | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c
> index 85f60ae..8c73748 100644
> --- a/utils/gssd/krb5_util.c
> +++ b/utils/gssd/krb5_util.c
> @@ -484,7 +484,7 @@ gssd_get_single_krb5_cred(krb5_context context,
> if (ccache)
> krb5_cc_close(context, ccache);
> krb5_free_cred_contents(context, &my_creds);
> - free(k5err);
> + krb5_free_string(context, k5err);
> return (code);
> }
>
> @@ -723,7 +723,7 @@ gssd_search_krb5_keytab(krb5_context context, krb5_keytab kt,
> "we failed to unparse principal name: %s\n",
> k5err);
> k5_free_kt_entry(context, kte);
> - free(k5err);
> + krb5_free_string(context, k5err);
> k5err = NULL;
> continue;
> }
> @@ -770,7 +770,7 @@ gssd_search_krb5_keytab(krb5_context context, krb5_keytab kt,
> if (retval < 0)
> retval = 0;
> out:
> - free(k5err);
> + krb5_free_string(context, k5err);
> return retval;
> }
>
> @@ -927,7 +927,7 @@ find_keytab_entry(krb5_context context, krb5_keytab kt,
> k5err = gssd_k5_err_msg(context, code);
> printerr(1, "%s while building principal for '%s'\n",
> k5err, spn);
> - free(k5err);
> + krb5_free_string(context, k5err);
> k5err = NULL;
> continue;
> }
> @@ -937,7 +937,7 @@ find_keytab_entry(krb5_context context, krb5_keytab kt,
> k5err = gssd_k5_err_msg(context, code);
> printerr(3, "%s while getting keytab entry for '%s'\n",
> k5err, spn);
> - free(k5err);
> + krb5_free_string(context, k5err);
> k5err = NULL;
> /*
> * We tried the active directory machine account
> @@ -986,7 +986,7 @@ out:
> k5_free_default_realm(context, default_realm);
> if (realmnames)
> krb5_free_host_realm(context, realmnames);
> - free(k5err);
> + krb5_free_string(context, k5err);
> return retval;
> }
>
> @@ -1249,7 +1249,7 @@ gssd_destroy_krb5_machine_creds(void)
> printerr(0, "WARNING: %s while resolving credential "
> "cache '%s' for destruction\n", k5err,
> ple->ccname);
> - free(k5err);
> + krb5_free_string(context, k5err);
> k5err = NULL;
> continue;
> }
> @@ -1258,13 +1258,13 @@ gssd_destroy_krb5_machine_creds(void)
> k5err = gssd_k5_err_msg(context, code);
> printerr(0, "WARNING: %s while destroying credential "
> "cache '%s'\n", k5err, ple->ccname);
> - free(k5err);
> + krb5_free_string(context, k5err);
> k5err = NULL;
> }
> }
> krb5_free_context(context);
> out:
> - free(k5err);
> + krb5_free_string(context, k5err);
> }
>
> /*
> @@ -1347,7 +1347,7 @@ out_free_kt:
> out_free_context:
> krb5_free_context(context);
> out:
> - free(k5err);
> + krb5_free_string(context, k5err);
> return retval;
> }
>
>