Memory leak bug fix in --key-gen mode
authorMichael Rash <mbr@cipherdyne.org>
Fri, 3 Aug 2012 02:00:05 +0000 (22:00 -0400)
committerMichael Rash <mbr@cipherdyne.org>
Fri, 3 Aug 2012 02:00:05 +0000 (22:00 -0400)
This commit fixes the following memory caught with the test suite in valgrind
mode:

HEAP SUMMARY:
    in use at exit: 285 bytes in 4 blocks
  total heap usage: 11 allocs, 7 frees, 3,179 bytes allocated

5 bytes in 1 blocks are indirectly lost in loss record 1 of 4
   at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x50CB801: strdup (strdup.c:43)
   by 0x4E3A7B2: fko_set_username (fko_user.c:96)
   by 0x4E39628: fko_new (fko_funcs.c:86)
   by 0x10AB54: main (fwknop.c:83)

7 bytes in 1 blocks are indirectly lost in loss record 2 of 4
   at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4E395D7: fko_new (fko_funcs.c:62)
   by 0x10AB54: main (fwknop.c:83)

17 bytes in 1 blocks are indirectly lost in loss record 3 of 4
   at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4E3A06A: fko_set_rand_value (fko_rand_value.c:114)
   by 0x4E39605: fko_new (fko_funcs.c:75)
   by 0x10AB54: main (fwknop.c:83)

285 (256 direct, 29 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 4
   at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4E395BA: fko_new (fko_funcs.c:46)
   by 0x10AB54: main (fwknop.c:83)

LEAK SUMMARY:
   definitely lost: 256 bytes in 1 blocks
   indirectly lost: 29 bytes in 3 blocks
     possibly lost: 0 bytes in 0 blocks
   still reachable: 0 bytes in 0 blocks
        suppressed: 0 bytes in 0 blocks

client/fwknop.c

index 2f12bbc..e272abc 100644 (file)
@@ -78,15 +78,6 @@ main(int argc, char **argv)
     else if (!options.no_save_args)
         save_args(argc, argv);
 
-    /* Intialize the context
-    */
-    res = fko_new(&ctx);
-    if(res != FKO_SUCCESS)
-    {
-        errmsg("fko_new", res);
-        return(EXIT_FAILURE);
-    }
-
     /* Generate Rijndael + HMAC keys from /dev/random (base64
      * encoded) and exit.
     */
@@ -115,6 +106,15 @@ main(int argc, char **argv)
         return(EXIT_SUCCESS);
     }
 
+    /* Intialize the context
+    */
+    res = fko_new(&ctx);
+    if(res != FKO_SUCCESS)
+    {
+        errmsg("fko_new", res);
+        return(EXIT_FAILURE);
+    }
+
     /* Display version info and exit.
     */
     if(options.version)
@@ -419,6 +419,8 @@ main(int argc, char **argv)
         if(res != FKO_SUCCESS)
         {
             errmsg("fko_set_spa_encryption_mode", res);
+            fko_destroy(ctx);
+            fko_destroy(ctx2);
             return(EXIT_FAILURE);
         }