From 049545b459ea856ec775a2640354d486029fd698 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Jul 2012 23:09:32 -0400 Subject: [PATCH] [client] Fixed several minor memory leaks caught by valgrind This commit fixes memory leaks like the following in the fwknop client: HEAP SUMMARY: in use at exit: 300 bytes in 11 blocks total heap usage: 100 allocs, 89 frees, 16,583 bytes allocated 16 bytes in 1 blocks are indirectly lost in loss record 1 of 11 at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x5146C59: __nss_lookup_function (nsswitch.c:456) by 0x5C3D63E: ??? by 0x50FF3FC: getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256) by 0x508938E: cuserid (cuserid.c:37) by 0x4E3983A: fko_set_username (fko_user.c:65) by 0x4E38D5C: fko_new (fko_funcs.c:84) by 0x10A824: main (fwknop.c:75) 16 bytes in 1 blocks are indirectly lost in loss record 2 of 11 at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x5146C59: __nss_lookup_function (nsswitch.c:456) by 0x5C3D658: ??? by 0x50FF3FC: getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256) by 0x508938E: cuserid (cuserid.c:37) by 0x4E3983A: fko_set_username (fko_user.c:65) by 0x4E38D5C: fko_new (fko_funcs.c:84) by 0x10A824: main (fwknop.c:75) 16 bytes in 1 blocks are indirectly lost in loss record 3 of 11 at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x5146C59: __nss_lookup_function (nsswitch.c:456) by 0x5C3D672: ??? by 0x50FF3FC: getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256) by 0x508938E: cuserid (cuserid.c:37) by 0x4E3983A: fko_set_username (fko_user.c:65) by 0x4E38D5C: fko_new (fko_funcs.c:84) by 0x10A824: main (fwknop.c:75) 16 bytes in 1 blocks are indirectly lost in loss record 4 of 11 at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x5146C59: __nss_lookup_function (nsswitch.c:456) by 0x5C3D68C: ??? by 0x50FF3FC: getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256) by 0x508938E: cuserid (cuserid.c:37) by 0x4E3983A: fko_set_username (fko_user.c:65) by 0x4E38D5C: fko_new (fko_funcs.c:84) by 0x10A824: main (fwknop.c:75) --- ChangeLog | 1 + client/fwknop.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index c077db4..09f908f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,7 @@ fwknop-2.0.1 (07//2012): - [test suite] Bug fix on Mac OS X systems to account for libfko.dylib path instead of libfko.so. This fixes the existence check for libfko. - [test suite] Added tests for --nat-local mode. + - [client] Fixed several minor memory leaks caught by valgrind. - Minor gcc warning fix: fko_decode.c:43:17: warning: variable ‘edata_size’ set but not used [-Wunused-but-set-variable]. diff --git a/client/fwknop.c b/client/fwknop.c index 040c3ff..6157fae 100644 --- a/client/fwknop.c +++ b/client/fwknop.c @@ -87,6 +87,7 @@ main(int argc, char **argv) fprintf(stdout, "fwknop client %s, FKO protocol version %s\n", MY_VERSION, version); + fko_destroy(ctx); return(EXIT_SUCCESS); } @@ -98,6 +99,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_spa_client_timeout", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -108,6 +110,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_spa_message_type", res); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -119,6 +122,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_timestamp", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -128,6 +132,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_timestamp", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -147,7 +152,10 @@ main(int argc, char **argv) */ if (options.resolve_ip_http) if(resolve_ip_http(&options) < 0) + { + fko_destroy(ctx); return(EXIT_FAILURE); + } /* Set a message string by combining the allow IP and the * port/protocol. The fwknopd server allows no port/protocol @@ -169,6 +177,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_spa_message", res); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -180,6 +189,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_nat_access_str", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -192,6 +202,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_username", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -212,6 +223,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_spa_encryption_type", res); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -225,6 +237,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_gpg_home_dir", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -236,6 +249,7 @@ main(int argc, char **argv) if(IS_GPG_ERROR(res)) fprintf(stderr, "GPG ERR: %s\n", fko_gpg_errstr(ctx)); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -249,6 +263,7 @@ main(int argc, char **argv) if(IS_GPG_ERROR(res)) fprintf(stderr, "GPG ERR: %s\n", fko_gpg_errstr(ctx)); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -262,6 +277,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_spa_digest_type", res); + fko_destroy(ctx); return(EXIT_FAILURE); } } @@ -276,6 +292,7 @@ main(int argc, char **argv) if(IS_GPG_ERROR(res)) fprintf(stderr, "GPG ERR: %s\n", fko_gpg_errstr(ctx)); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -296,6 +313,7 @@ main(int argc, char **argv) if(res < 0) { fprintf(stderr, "send_spa_packet: packet not sent.\n"); + fko_destroy(ctx); return(EXIT_FAILURE); } else @@ -317,6 +335,7 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_get_spa_data", res); + fko_destroy(ctx); return(EXIT_FAILURE); } @@ -332,6 +351,8 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_new_with_data", res); + fko_destroy(ctx); + fko_destroy(ctx2); return(EXIT_FAILURE); } @@ -345,6 +366,8 @@ main(int argc, char **argv) if(res != FKO_SUCCESS) { errmsg("fko_set_gpg_home_dir", res); + fko_destroy(ctx); + fko_destroy(ctx2); return(EXIT_FAILURE); } } @@ -368,9 +391,13 @@ main(int argc, char **argv) debugging purposes. */ fprintf(stderr, "GPG ERR: %s\n%s\n", fko_gpg_errstr(ctx2), "No access to recipient private key?\n"); + fko_destroy(ctx); + fko_destroy(ctx2); return(EXIT_SUCCESS); } + fko_destroy(ctx); + fko_destroy(ctx2); return(EXIT_FAILURE); } -- 1.7.5.4