summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-12-19 08:48:06 -0500
committerJakub Hrozek <jhrozek@redhat.com>2012-12-20 17:18:08 +0100
commitd73f8a53dd280da10640f51a85d8eef4ce8f8946 (patch)
tree631ae739af9e29ab7e97674b23749cf054ba272d
parentf1375f14fc7bfba39c04571896f3db61c53beb2d (diff)
downloadsssd-1.9.2-55.tar.gz
sssd-1.9.2-55.tar.xz
sssd-1.9.2-55.zip
sssd_nss: Plug memory leaks1.9.2-55
A recent patch introduced a glaring memory leak in the routines that clean up memcache memory on initgroups calls.
-rw-r--r--src/responder/nss/nsssrv_cmd.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index 58d8afab5..22eba5127 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);
}
}
@@ -1853,6 +1855,7 @@ void nss_update_gr_memcache(struct nss_ctx *nctx)
ret, strerror(ret)));
}
}
+ talloc_zfree(res);
}
}
@@ -3368,6 +3371,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;
@@ -3393,12 +3397,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
@@ -3453,6 +3459,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 ? */