From 5881a9dbc87f20cd149f53f444b95e8b579638c7 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 27 Aug 2020 13:23:49 -0400 Subject: [PATCH] Fix leaks in our test suite itself These are mostly laziness in freeing since the programs are short-lived. Signed-off-by: Simo Sorce [rharwood@redhat.com: rewrote commit message] Reviewed-by: Robbie Harwood (cherry picked from commit dc56c86f1dcb1ae4dbc35facf5f50fb21c9d5049) (cherry picked from commit 617d9ee9ce967cf20462e3cc7a575fda0f945075) --- tests/interposetest.c | 22 +++++++++++++++------- tests/t_impersonate.c | 11 ++++++++--- tests/t_init.c | 2 ++ tests/t_setcredopt.c | 8 ++++++-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/tests/interposetest.c b/tests/interposetest.c index a00904f..0cdd473 100644 --- a/tests/interposetest.c +++ b/tests/interposetest.c @@ -71,6 +71,8 @@ static int gptest_inq_context(gss_ctx_id_t ctx) DEBUG("Context validity: %d sec.\n", time_rec); done: + (void)gss_release_name(&min, &src_name); + (void)gss_release_name(&min, &targ_name); (void)gss_release_buffer(&min, &sname); (void)gss_release_buffer(&min, &tname); (void)gss_release_buffer(&min, &mechstr); @@ -274,7 +276,7 @@ void run_client(struct aproc *data) gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min); goto done; } - fprintf(stdout, "Client, RECV: [%s]\n", buffer); + fprintf(stdout, "Client, RECV: [%*s]\n", buflen, buffer); /* test gss_wrap_iov_length */ @@ -837,19 +839,22 @@ int main(int argc, const char *main_argv[]) if (opt_version) { puts(VERSION""DISTRO_VERSION""PRERELEASE_VERSION); - return 0; + ret = 0; + goto done; } if (opt_target == NULL) { fprintf(stderr, "Missing target!\n"); poptPrintUsage(pc, stderr, 0); - return 1; + ret = 1; + goto done; } if (!opt_all) { - return run_cli_srv_test(PROXY_LOCAL_ONLY, - PROXY_LOCAL_ONLY, - opt_target); + ret = run_cli_srv_test(PROXY_LOCAL_ONLY, + PROXY_LOCAL_ONLY, + opt_target); + goto done; } for (i=0; i<4; i++) { @@ -861,10 +866,13 @@ int main(int argc, const char *main_argv[]) lookup_gssproxy_behavior(k), ret ? "failed" : "succeeded"); if (ret) { - return ret; + goto done; } } } +done: + poptFreeContext(pc); + free(opt_target); return ret; } diff --git a/tests/t_impersonate.c b/tests/t_impersonate.c index 8ca6e9c..e7b0bc2 100644 --- a/tests/t_impersonate.c +++ b/tests/t_impersonate.c @@ -12,9 +12,9 @@ int main(int argc, const char *argv[]) gss_ctx_id_t accept_ctx = GSS_C_NO_CONTEXT; gss_buffer_desc in_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc out_token = GSS_C_EMPTY_BUFFER; - gss_name_t user_name; - gss_name_t proxy_name; - gss_name_t target_name; + gss_name_t user_name = GSS_C_NO_NAME; + gss_name_t proxy_name = GSS_C_NO_NAME; + gss_name_t target_name = GSS_C_NO_NAME; gss_OID_set_desc oid_set = { 1, discard_const(gss_mech_krb5) }; uint32_t ret_maj; uint32_t ret_min; @@ -207,9 +207,14 @@ int main(int argc, const char *argv[]) ret = 0; done: + gss_release_name(&ret_min, &user_name); + gss_release_name(&ret_min, &proxy_name); + gss_release_name(&ret_min, &target_name); gss_release_buffer(&ret_min, &in_token); gss_release_buffer(&ret_min, &out_token); gss_release_cred(&ret_min, &impersonator_cred_handle); gss_release_cred(&ret_min, &cred_handle); + gss_delete_sec_context(&ret_min, &accept_ctx, GSS_C_NO_BUFFER); + gss_delete_sec_context(&ret_min, &init_ctx, GSS_C_NO_BUFFER); return ret; } diff --git a/tests/t_init.c b/tests/t_init.c index 02407ce..76bd4c1 100644 --- a/tests/t_init.c +++ b/tests/t_init.c @@ -82,6 +82,8 @@ int main(int argc, const char *argv[]) goto done; } + gss_release_buffer(&ret_min, &out_token); + ret = t_recv_buffer(STDIN_FD, buffer, &buflen); if (ret != 0) { DEBUG("Failed to read token from STDIN\n"); diff --git a/tests/t_setcredopt.c b/tests/t_setcredopt.c index 1399474..bc5e13f 100644 --- a/tests/t_setcredopt.c +++ b/tests/t_setcredopt.c @@ -12,8 +12,8 @@ int main(int argc, const char *argv[]) gss_ctx_id_t accept_ctx = GSS_C_NO_CONTEXT; gss_buffer_desc in_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc out_token = GSS_C_EMPTY_BUFFER; - gss_name_t user_name; - gss_name_t target_name; + gss_name_t user_name = GSS_C_NO_NAME; + gss_name_t target_name = GSS_C_NO_NAME; gss_OID_set_desc oid_set = { 1, discard_const(gss_mech_krb5) }; uint32_t ret_maj; uint32_t ret_min; @@ -160,8 +160,12 @@ int main(int argc, const char *argv[]) ret = 0; done: + gss_release_name(&ret_min, &user_name); + gss_release_name(&ret_min, &target_name); gss_release_buffer(&ret_min, &in_token); gss_release_buffer(&ret_min, &out_token); gss_release_cred(&ret_min, &cred_handle); + gss_delete_sec_context(&ret_min, &init_ctx, GSS_C_NO_BUFFER); + gss_delete_sec_context(&ret_min, &accept_ctx, GSS_C_NO_BUFFER); return ret; }