auth: plug auth realms memory leaks 00/13900/5
authorMichael Meffie <mmeffie@sinenomine.net>
Fri, 16 Nov 2018 15:00:17 +0000 (10:00 -0500)
committerStephan Wiesand <stephan.wiesand@desy.de>
Sun, 9 Feb 2020 17:41:49 +0000 (12:41 -0500)
The function _afsconf_FreeRealms, called by afsconf_CloseInternal, leaks
two afsconf_realms structures.

The function _afsconf_LoadRealms also leaks those two structures when it
fails.

These memory leaks were discovered with valgrind.

Reviewed-on: https://gerrit.openafs.org/13395
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
(cherry picked from commit 80ed9d98779135d43f23c9e51e7bd6bce36405f1)

Change-Id: I3e4824e2be4a22b62c1e9502860b952db777cae7
Reviewed-on: https://gerrit.openafs.org/13900
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Marcio Brito Barbosa <mbarbosa@sinenomine.net>
Reviewed-by: Yadavendra Yadav <yadayada@in.ibm.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>

src/auth/realms.c

index db5fd31..6508047 100644 (file)
@@ -411,11 +411,13 @@ _afsconf_FreeRealms(struct afsconf_dir *dir)
        if (dir->local_realms) {
            destroy_tree(dir->local_realms);
            free_realm_entries(&dir->local_realms->list);
+           free(dir->local_realms);
            dir->local_realms = NULL;
        }
        if (dir->exclusions) {
            destroy_tree(dir->exclusions);
            free_realm_entries(&dir->exclusions->list);
+           free(dir->exclusions);
            dir->exclusions = NULL;
        }
     }
@@ -485,10 +487,12 @@ _afsconf_LoadRealms(struct afsconf_dir *dir)
     if (local_realms) {
        destroy_tree(local_realms);
        free_realm_entries(&local_realms->list);
+       free(local_realms);
     }
     if (exclusions) {
        destroy_tree(dir->exclusions);
        free_realm_entries(&exclusions->list);
+       free(exclusions);
     }
     return code;
 }