diff options
author | Simo Sorce <simo@redhat.com> | 2012-12-19 08:48:06 -0500 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-12-19 18:39:52 +0100 |
commit | 1f15b746e77f54ad82e1cb5c74f29d327b851c5a (patch) | |
tree | 57d144ec13742fae09739564730b9392ca621179 /src/responder/nss | |
parent | aed6196263ebddb6f8ffb12eace11539f5941662 (diff) | |
download | sssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.tar.gz sssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.tar.bz2 sssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.zip |
sssd_nss: Plug memory leaks
A recent patch introduced a glaring memory leak in the routines that clean up
memcache memory on initgroups calls.
Diffstat (limited to 'src/responder/nss')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index c30e21ee..27cbedcb 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -154,6 +154,8 @@ void nss_update_pw_memcache(struct nss_ctx *nctx) ret, strerror(ret))); } } + + talloc_zfree(res); } } @@ -1855,6 +1857,7 @@ void nss_update_gr_memcache(struct nss_ctx *nctx) ret, strerror(ret))); } } + talloc_zfree(res); } } @@ -3373,6 +3376,7 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx, const char *name, const char *domain, int gnum, uint32_t *groups) { + TALLOC_CTX *tmp_ctx = NULL; struct sss_domain_info *dom; struct ldb_result *res; bool changed = false; @@ -3398,12 +3402,14 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx, return; } - ret = sysdb_initgroups(NULL, dom->sysdb, name, &res); + tmp_ctx = talloc_new(NULL); + + ret = sysdb_initgroups(tmp_ctx, dom->sysdb, name, &res); if (ret != EOK && ret != ENOENT) { DEBUG(SSSDBG_CRIT_FAILURE, ("Failed to make request to our cache! [%d][%s]\n", ret, strerror(ret))); - return; + goto done; } /* copy, we need the original intact in case we need to invalidate @@ -3458,6 +3464,9 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx, } } } + +done: + talloc_free(tmp_ctx); } /* FIXME: what about mpg, should we return the user's GID ? */ |