diff options
author | Stefan Metzmacher <metze@samba.org> | 2018-02-10 23:54:33 +0100 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2018-02-21 14:19:17 +0100 |
commit | da784305e7b306664b79d30a734d45582f5bf4dd (patch) | |
tree | bda6cc6eaed4c8921c864a6e6acd9eff01a4b9f1 /nsswitch/nsstest.c | |
parent | 7b86b94c71268cdab434ced74caedcdd5eb20e12 (diff) | |
download | samba-da784305e7b306664b79d30a734d45582f5bf4dd.tar.gz |
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 <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Diffstat (limited to 'nsswitch/nsstest.c')
-rw-r--r-- | nsswitch/nsstest.c | 18 |
1 files 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 @@ again: 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 @@ again: 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 @@ again: 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; |