From: Andreas Schneider Date: Wed, 29 Jun 2016 11:38:19 +0000 (+0200) Subject: s3-winbind: Fix memory leak with each cached credential login X-Git-Tag: samba-4.3.12~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e4a706e0e65f61c5405b8d56853c25a58059f4e;p=thirdparty%2Fsamba.git s3-winbind: Fix memory leak with each cached credential login When we allow offline logon and have a lot of logins, windbind will leak 4k of memory which each log in. On systems with heavy load this can grow quickly and the OOM killer will kill Winbind. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11999 Signed-off-by: Andreas Schneider Reviewed-by: Guenther Deschner Autobuild-User(master): Andreas Schneider Autobuild-Date(master): Wed Jun 29 19:03:53 CEST 2016 on sn-devel-144 (cherry picked from commit 826f61960ec74deedc9d556a3b8fe04d9178dcd8) --- diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c index 35622170819..ef6dc877a79 100644 --- a/source3/winbindd/winbindd_cache.c +++ b/source3/winbindd/winbindd_cache.c @@ -3471,7 +3471,7 @@ NTSTATUS wcache_remove_oldest_cached_creds(struct winbindd_domain *domain, const struct winbind_cache *cache = get_cache(domain); NTSTATUS status; int ret; - struct cred_list *cred, *oldest = NULL; + struct cred_list *cred, *next, *oldest = NULL; if (!cache->tdb) { return NT_STATUS_INTERNAL_DB_ERROR; @@ -3540,7 +3540,11 @@ NTSTATUS wcache_remove_oldest_cached_creds(struct winbindd_domain *domain, const status = NT_STATUS_UNSUCCESSFUL; } done: - SAFE_FREE(wcache_cred_list); + for (cred = wcache_cred_list; cred; cred = next) { + next = cred->next; + DLIST_REMOVE(wcache_cred_list, cred); + SAFE_FREE(cred); + } SAFE_FREE(oldest); return status;