Fix minor memory leaks in kvno
authorGreg Hudson <ghudson@mit.edu>
Sun, 12 Mar 2017 16:42:37 +0000 (12:42 -0400)
committerGreg Hudson <ghudson@mit.edu>
Mon, 13 Mar 2017 16:54:39 +0000 (12:54 -0400)
In do_k5_kvno(), free allocated values on success as well as failure.
In t_kdb.py, run kvno with multiple arguments to manifest this leak in
asan and valgrind.  Reported by Cel Skeggs.

ticket: 8558

src/clients/kvno/kvno.c
src/tests/t_kdb.py

index 80bee59e2337551008236dbac4b5f0d518f48328..df40e390bad7c822e25a8144877d15a28cc1e145 100644 (file)
@@ -326,9 +326,7 @@ static void do_v5_kvno (int count, char *names[],
                 printf(_("%s: kvno = %d\n"), princ, ticket->enc_part.kvno);
         }
 
-        continue;
-
-    error:
+    cleanup:
         if (server != NULL)
             krb5_free_principal(context, server);
         if (ticket != NULL)
@@ -337,7 +335,11 @@ static void do_v5_kvno (int count, char *names[],
             krb5_free_creds(context, out_creds);
         if (princ != NULL)
             krb5_free_unparsed_name(context, princ);
+        continue;
+
+    error:
         errors++;
+        goto cleanup;
     }
 
     if (keytab)
index 6a3fabcb9ceb64154da8e9bfabf91f3c3c563b8e..99cccd6b2ee5a4029a5010fe0ca0be7579f3f4fa 100755 (executable)
@@ -328,8 +328,7 @@ realm.run([kadminl, 'getprinc', 'alias'],
           expected_msg='Principal: canon@KRBTEST.COM\n')
 realm.run([kadminl, 'getprinc', 'canon'],
           expected_msg='Principal: canon@KRBTEST.COM\n')
-realm.run([kvno, 'alias'])
-realm.run([kvno, 'canon'])
+realm.run([kvno, 'alias', 'canon'])
 out = realm.run([klist])
 if 'alias@KRBTEST.COM\n' not in out or 'canon@KRBTEST.COM' not in out:
     fail('After fetching alias and canon, klist is missing one or both')