summaryrefslogtreecommitdiff
path: root/nsswitch
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2018-02-10 23:54:33 +0100
committerStefan Metzmacher <metze@samba.org>2018-02-27 16:00:11 +0100
commit2ba8639067f96927a7c95c5525d8722553bbeb51 (patch)
tree38813bc37f6c1a50c5f8be863c05ce2d8a3f8609 /nsswitch
parent3bc00ecaea4beeeaf233c8e5e0c5d5cb074902bf (diff)
downloadsamba-2ba8639067f96927a7c95c5525d8722553bbeb51.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> (cherry picked from commit da784305e7b306664b79d30a734d45582f5bf4dd)
Diffstat (limited to 'nsswitch')
-rw-r--r--nsswitch/nsstest.c18
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;