From 587ebfd021b62359298f6ebe46e12b3b6469b0bc Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 10 Feb 2018 23:54:33 +0100 Subject: [PATCH] nsswitch: fix double free errors in nsstest.c We need to zero out static pointers on free. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13283 Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme (cherry picked from commit da784305e7b306664b79d30a734d45582f5bf4dd) --- nsswitch/nsstest.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/nsswitch/nsstest.c b/nsswitch/nsstest.c index 4b3d0a4301c..6d92806cffc 100644 --- a/nsswitch/nsstest.c +++ b/nsswitch/nsstest.c @@ -21,6 +21,8 @@ #include "replace.h" #include "nsswitch/nsstest.h" +#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); (x)=NULL;} } while(0) + static const char *so_path = "/lib/libnss_winbind.so"; static const char *nss_name = "winbind"; static int nss_errno; @@ -48,10 +50,10 @@ static void *find_fn(const char *name) if (!res) { printf("Can't find function %s\n", s); total_errors++; - free(s); + SAFE_FREE(s); return NULL; } - free(s); + SAFE_FREE(s); return res; } @@ -194,12 +196,12 @@ static struct group *nss_getgrent(void) goto again; } if (status == NSS_STATUS_NOTFOUND) { - free(buf); + SAFE_FREE(buf); return NULL; } if (status != NSS_STATUS_SUCCESS) { report_nss_error("getgrent", status); - free(buf); + SAFE_FREE(buf); return NULL; } return &grp; @@ -232,12 +234,12 @@ static struct group *nss_getgrnam(const char *name) goto again; } if (status == NSS_STATUS_NOTFOUND) { - free(buf); + SAFE_FREE(buf); return NULL; } if (status != NSS_STATUS_SUCCESS) { report_nss_error("getgrnam", status); - free(buf); + SAFE_FREE(buf); return NULL; } return &grp; @@ -271,12 +273,12 @@ static struct group *nss_getgrgid(gid_t gid) goto again; } if (status == NSS_STATUS_NOTFOUND) { - free(buf); + SAFE_FREE(buf); return NULL; } if (status != NSS_STATUS_SUCCESS) { report_nss_error("getgrgid", status); - free(buf); + SAFE_FREE(buf); return NULL; } return &grp; -- 2.13.6