From 0e6c9d03cacf24de4265ee0f902c216ba5a131c9 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 19 Dec 2012 21:17:40 -0500 Subject: mmap cache: invalidate cache on fatal error If a fatal EFAULT error is returned by the internal function that frees used memory invalidate the whole cache and reinit it. This way we avoid further corruption and insure clients see consistent data. Also insure we use the right context in init() and we use talloc_zfree() in reinit so that if the init() later fails we do not leave around a pointer to free memory in the callers. --- src/responder/nss/nsssrv_cmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/responder/nss/nsssrv_cmd.c') diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index 27cbedcb..2ad9194c 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -432,7 +432,7 @@ static int fill_pwent(struct sss_packet *packet, num++; if (pw_mmap_cache && nctx->pwd_mc_ctx) { - ret = sss_mmap_cache_pw_store(nctx->pwd_mc_ctx, + ret = sss_mmap_cache_pw_store(&nctx->pwd_mc_ctx, &fullname, &pwfield, uid, gid, &gecos, &homedir, &shell); @@ -2185,7 +2185,7 @@ static int fill_grent(struct sss_packet *packet, /* body was reallocated, so fullname might be pointing to * where body used to be, not where it is */ to_sized_string(&fullname, (const char *)&body[rzero+STRS_ROFFSET]); - ret = sss_mmap_cache_gr_store(nctx->grp_mc_ctx, + ret = sss_mmap_cache_gr_store(&nctx->grp_mc_ctx, &fullname, &pwfield, gid, memnum, (char *)&body[rzero] + STRS_ROFFSET + fullname.len + pwfield.len, -- cgit