diff options
author | Jeremy Allison <jra@samba.org> | 2001-12-26 08:32:30 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-12-26 08:32:30 +0000 |
commit | 26e4c4099c61c7ba9f2153e56061bea9882553d9 (patch) | |
tree | b68969a82c21508f28f511fc7263e5242351e47c | |
parent | 5e3491784277dd90180ef199d2fa258614958545 (diff) | |
download | samba-26e4c4099c61c7ba9f2153e56061bea9882553d9.tar.gz samba-26e4c4099c61c7ba9f2153e56061bea9882553d9.tar.xz samba-26e4c4099c61c7ba9f2153e56061bea9882553d9.zip |
Get religion on using SAFE_FREE.
Jeremy.
66 files changed, 254 insertions, 310 deletions
diff --git a/source/client/client.c b/source/client/client.c index 78c242af745..5df0cd1df43 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -370,10 +370,7 @@ functions for do_list_queue */ static void reset_do_list_queue(void) { - if (do_list_queue) - { - free(do_list_queue); - } + SAFE_FREE(do_list_queue); do_list_queue = 0; do_list_queue_size = 0; do_list_queue_start = 0; @@ -711,7 +708,7 @@ static void do_get(char *rname,char *lname) rname, (long)nread)); } - free(data); + SAFE_FREE(data); if (!cli_close(cli, fnum)) { DEBUG(0,("Error %s closing remote file\n",cli_errstr(cli))); @@ -1048,13 +1045,13 @@ static void do_put(char *rname,char *lname) if (!cli_close(cli, fnum)) { DEBUG(0,("%s closing remote file %s\n",cli_errstr(cli),rname)); fclose(f); - if (buf) free(buf); + SAFE_FREE(buf); return; } fclose(f); - if (buf) free(buf); + SAFE_FREE(buf); { struct timeval tp_end; @@ -1142,8 +1139,8 @@ static void free_file_list (struct file_list * list) { tmp = list; DLIST_REMOVE(list, list); - if (tmp->file_path) free(tmp->file_path); - free(tmp); + SAFE_FREE(tmp->file_path); + SAFE_FREE(tmp); } } @@ -1213,7 +1210,7 @@ static int file_find(struct file_list **list, const char *directory, } if (ret == -1) { - free(path); + SAFE_FREE(path); closedir(dir); return -1; } @@ -1228,7 +1225,7 @@ static int file_find(struct file_list **list, const char *directory, entry->isdir = isdir; DLIST_ADD(*list, entry); } else { - free(path); + SAFE_FREE(path); } } @@ -1264,7 +1261,7 @@ static void cmd_mput(void) for (temp_list = file_list; temp_list; temp_list = temp_list->next) { - if (lname) free(lname); + SAFE_FREE(lname); if (asprintf(&lname, "%s/", temp_list->file_path) <= 0) continue; trim_string(lname, "./", "/"); @@ -1273,7 +1270,7 @@ static void cmd_mput(void) if (temp_list->isdir) { /* if (!recurse) continue; */ - if (quest) free(quest); + SAFE_FREE(quest); asprintf(&quest, "Put directory %s? ", lname); if (prompt && !yesno(quest)) { /* No */ /* Skip the directory */ @@ -1281,7 +1278,7 @@ static void cmd_mput(void) if (!seek_list(temp_list, lname)) break; } else { /* Yes */ - if (rname) free(rname); + SAFE_FREE(rname); asprintf(&rname, "%s%s", cur_dir, lname); dos_format(rname); if (!cli_chkpath(cli, rname) && @@ -1295,13 +1292,13 @@ static void cmd_mput(void) } continue; } else { - if (quest) free(quest); + SAFE_FREE(quest); asprintf(&quest,"Put file %s? ", lname); if (prompt && !yesno(quest)) /* No */ continue; /* Yes */ - if (rname) free(rname); + SAFE_FREE(rname); asprintf(&rname, "%s%s", cur_dir, lname); } @@ -1310,9 +1307,9 @@ static void cmd_mput(void) do_put(rname, lname); } free_file_list(file_list); - if (quest) free(quest); - if (lname) free(lname); - if (rname) free(rname); + SAFE_FREE(quest); + SAFE_FREE(lname); + SAFE_FREE(rname); } } @@ -1876,7 +1873,7 @@ static char **completion_fn(const char *text, int start, int end) } if (count == 2) { - free(matches[0]); + SAFE_FREE(matches[0]); matches[0] = strdup(matches[1]); } matches[count] = NULL; diff --git a/source/client/clitar.c b/source/client/clitar.c index fff390b8bee..2beb669de90 100644 --- a/source/client/clitar.c +++ b/source/client/clitar.c @@ -194,7 +194,7 @@ static void writetarheader(int f, char *aname, int size, time_t mtime, i = strlen(b)+1; DEBUG(5, ("File name in tar file: %s, size=%d, \n", b, (int)strlen(b))); dotarbuf(f, b, TBLOCK*(((i-1)/TBLOCK)+1)); - free(b); + SAFE_FREE(b); } /* use l + 1 to do the null too */ @@ -1228,7 +1228,7 @@ static void do_tarput(void) if (longfilename != NULL) { - free(finfo.name); /* Free the space already allocated */ + SAFE_FREE(finfo.name); /* Free the space already allocated */ finfo.name = longfilename; longfilename = NULL; @@ -1454,7 +1454,7 @@ void cmd_tar(void) process_tar(); - free(argl); + SAFE_FREE(argl); } /**************************************************************************** @@ -1471,7 +1471,7 @@ int process_tar(void) #else do_tarput(); #endif - free(tarbuf); + SAFE_FREE(tarbuf); close(tarhandle); break; case 'r': @@ -1521,7 +1521,7 @@ int process_tar(void) if (ntarf) dotareof(tarhandle); close(tarhandle); - free(tarbuf); + SAFE_FREE(tarbuf); DEBUG(0, ("tar: dumped %d files and directories\n", ntarf)); DEBUG(0, ("Total bytes written: %.0f\n", (double)ttarf)); @@ -1531,9 +1531,9 @@ int process_tar(void) if (must_free_cliplist) { int i; for (i = 0; i < clipn; ++i) { - free(cliplist[i]); + SAFE_FREE(cliplist[i]); } - free(cliplist); + SAFE_FREE(cliplist); cliplist = NULL; clipn = 0; must_free_cliplist = False; @@ -1653,16 +1653,16 @@ static int read_inclusion_file(char *filename) } if (inclusion_buffer) { - free(inclusion_buffer); + SAFE_FREE(inclusion_buffer); } if (error) { if (cliplist) { char **pp; /* We know cliplist is always null-terminated */ for (pp = cliplist; *pp; ++pp) { - free(*pp); + SAFE_FREE(*pp); } - free(cliplist); + SAFE_FREE(cliplist); cliplist = NULL; must_free_cliplist = False; } diff --git a/source/include/smb_macros.h b/source/include/smb_macros.h index 64135c3cb92..bcbe69146aa 100644 --- a/source/include/smb_macros.h +++ b/source/include/smb_macros.h @@ -37,7 +37,9 @@ #define IS_DOS_HIDDEN(test_mode) (((test_mode) & aHIDDEN) != 0) /* free memory if the pointer is valid and zero the pointer */ +#ifndef SAFE_FREE #define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) +#endif /* zero a structure */ #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) diff --git a/source/include/talloc.h b/source/include/talloc.h index 89c2f82e056..ee0c943c51f 100644 --- a/source/include/talloc.h +++ b/source/include/talloc.h @@ -32,4 +32,9 @@ typedef struct { size_t total_alloc_size; } TALLOC_CTX; +/* free memory if the pointer is valid and zero the pointer */ +#ifndef SAFE_FREE +#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) +#endif + #endif diff --git a/source/lib/domain_namemap.c b/source/lib/domain_namemap.c index ef59e4d92f8..4465015570f 100644 --- a/source/lib/domain_namemap.c +++ b/source/lib/domain_namemap.c @@ -239,19 +239,10 @@ static ubi_slList ntusrname_map_list; static void delete_name_entry(name_map_entry *gmep) { - if (gmep->grp.nt_name) - { - free(gmep->grp.nt_name); - } - if (gmep->grp.nt_domain) - { - free(gmep->grp.nt_domain); - } - if (gmep->grp.unix_name) - { - free(gmep->grp.unix_name); - } - free((char*)gmep); + SAFE_FREE(gmep->grp.nt_name); + SAFE_FREE(gmep->grp.nt_domain); + SAFE_FREE(gmep->grp.unix_name); + SAFE_FREE((char*)gmep); } /************************************************************************** @@ -929,15 +920,8 @@ static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type) { res3 = False; } - if (types != NULL) - { - free(types); - } - - if (sids != NULL) - { - free(sids); - } + SAFE_FREE(types); + SAFE_FREE(sids); return res3 && res4; } diff --git a/source/lib/genrand.c b/source/lib/genrand.c index 54d561d2212..aad61d08309 100644 --- a/source/lib/genrand.c +++ b/source/lib/genrand.c @@ -34,8 +34,7 @@ size_t reseed_data_size; void set_rand_reseed_data(unsigned char *data, size_t len) { - if (reseed_data) - free(reseed_data); + SAFE_FREE(reseed_data); reseed_data_size = 0; reseed_data = (unsigned char *)memdup(data, len); diff --git a/source/lib/interface.c b/source/lib/interface.c index d1f9ed67d71..3a269294ed9 100644 --- a/source/lib/interface.c +++ b/source/lib/interface.c @@ -175,17 +175,14 @@ void load_interfaces(void) allones_ip = *interpret_addr2("255.255.255.255"); loopback_ip = *interpret_addr2("127.0.0.1"); - if (probed_ifaces) { - free(probed_ifaces); - probed_ifaces = NULL; - } + SAFE_FREE(probed_ifaces); /* dump the current interfaces if any */ while (local_interfaces) { struct interface *iface = local_interfaces; DLIST_REMOVE(local_interfaces, local_interfaces); ZERO_STRUCTPN(iface); - free(iface); + SAFE_FREE(iface); } /* probe the kernel for interfaces */ diff --git a/source/lib/snprintf.c b/source/lib/snprintf.c index 88eea2824be..8455847f065 100644 --- a/source/lib/snprintf.c +++ b/source/lib/snprintf.c @@ -820,7 +820,7 @@ static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c) if (!msg) return; syslog(facility_priority, "%s", msg); - free(msg); + SAFE_FREE(msg); } #endif /* HAVE_SYSLOG */ #endif /* HAVE_VSYSLOG */ diff --git a/source/lib/sysacls.c b/source/lib/sysacls.c index c4e21df6a1f..743c098bebd 100644 --- a/source/lib/sysacls.c +++ b/source/lib/sysacls.c @@ -1335,7 +1335,7 @@ char *sys_acl_to_text(SMB_ACL_T acl_d, ssize_t *len_p) maxlen += nbytes + 20 * (acl_d->count - i); if ((text = Realloc(oldtext, maxlen)) == NULL) { - free(oldtext); + SAFE_FREE(oldtext); errno = ENOMEM; return NULL; } @@ -1865,9 +1865,7 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d) ret = acl(name, ACL_SET, acl_count, acl_p); - if (acl_buf) { - free(acl_buf); - } + SAFE_FREE(acl_buf); return ret; } @@ -1919,13 +1917,13 @@ int sys_acl_delete_def_file(const char *path) int sys_acl_free_text(char *text) { - free(text); + SAFE_FREE(text); return 0; } int sys_acl_free_acl(SMB_ACL_T acl_d) { - free(acl_d); + SAFE_FREE(acl_d); return 0; } diff --git a/source/lib/talloc.c b/source/lib/talloc.c index cfd130e888b..1d8bc265802 100644 --- a/source/lib/talloc.c +++ b/source/lib/talloc.c @@ -62,7 +62,7 @@ void *talloc(TALLOC_CTX *t, size_t size) tc = malloc(sizeof(*tc)); if (!tc) { - free(p); + SAFE_FREE(p); return NULL; } @@ -112,8 +112,8 @@ void talloc_destroy_pool(TALLOC_CTX *t) while (t->list) { c = t->list->next; - if (t->list->ptr) free(t->list->ptr); - free(t->list); + SAFE_FREE(t->list->ptr); + SAFE_FREE(t->list); t->list = c; } @@ -128,7 +128,7 @@ void talloc_destroy(TALLOC_CTX *t) return; talloc_destroy_pool(t); memset(t, 0, sizeof(*t)); - free(t); + SAFE_FREE(t); } /* return the current total size of the pool. */ diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index 68042de9dc8..f90e8fb590b 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -250,7 +250,7 @@ void cli_shutdown(struct cli_state *cli) allocated = cli->allocated; ZERO_STRUCTP(cli); if (allocated) { - free(cli); + SAFE_FREE(cli); } } diff --git a/source/nmbd/nmbd_browserdb.c b/source/nmbd/nmbd_browserdb.c index 5b08207556a..cc1ce6c2ab5 100644 --- a/source/nmbd/nmbd_browserdb.c +++ b/source/nmbd/nmbd_browserdb.c @@ -54,7 +54,7 @@ ubi_dlNewList( lmb_browserlist ); */ static void remove_lmb_browser_entry( struct browse_cache_record *browc ) { - free( (char *)ubi_dlRemThis( lmb_browserlist, browc ) ); + safe_free( (char *)ubi_dlRemThis( lmb_browserlist, browc ) ); } /* remove_lmb_browser_entry */ /* ************************************************************************** ** diff --git a/source/nmbd/nmbd_packets.c b/source/nmbd/nmbd_packets.c index d187dfefa22..bfa96179dd4 100644 --- a/source/nmbd/nmbd_packets.c +++ b/source/nmbd/nmbd_packets.c @@ -1756,8 +1756,8 @@ only use %d.\n", (count*2) + 2, FD_SETSIZE)); *listen_number = (count*2) + 2; - if (*ppset) free(*ppset); - if (*psock_array) free(*psock_array); + SAFE_FREE(*ppset); + SAFE_FREE(*psock_array); *ppset = pset; *psock_array = sock_array; diff --git a/source/nmbd/nmbd_responserecordsdb.c b/source/nmbd/nmbd_responserecordsdb.c index 93b48d06f12..b47ea5eefa4 100644 --- a/source/nmbd/nmbd_responserecordsdb.c +++ b/source/nmbd/nmbd_responserecordsdb.c @@ -81,7 +81,7 @@ void remove_response_record(struct subnet_record *subrec, (*rrec->userdata->free_fn)(rrec->userdata); } else { ZERO_STRUCTP(rrec->userdata); - free((char *)rrec->userdata); + SAFE_FREE((char *)rrec->userdata); } } @@ -90,7 +90,7 @@ void remove_response_record(struct subnet_record *subrec, free_packet(rrec->packet); ZERO_STRUCTP(rrec); - free((char *)rrec); + SAFE_FREE((char *)rrec); num_response_packets--; /* count of total number of packets still around */ } @@ -136,7 +136,7 @@ struct response_record *make_response_record( struct subnet_record *subrec, { DEBUG(0,("make_response_queue_record: copy fail for userdata.\n")); ZERO_STRUCTP(rrec); - free(rrec); + SAFE_FREE(rrec); return NULL; } } @@ -148,7 +148,7 @@ struct response_record *make_response_record( struct subnet_record *subrec, { DEBUG(0,("make_response_queue_record: malloc fail for userdata.\n")); ZERO_STRUCTP(rrec); - free(rrec); + SAFE_FREE(rrec); return NULL; } rrec->userdata->copy_fn = userdata->copy_fn; diff --git a/source/nmbd/nmbd_serverlistdb.c b/source/nmbd/nmbd_serverlistdb.c index 26b0cddcea0..4245add2630 100644 --- a/source/nmbd/nmbd_serverlistdb.c +++ b/source/nmbd/nmbd_serverlistdb.c @@ -55,7 +55,7 @@ void remove_all_servers(struct work_record *work) work->serverlist = servrec->next; ZERO_STRUCTP(servrec); - free((char *)servrec); + SAFE_FREE((char *)servrec); } @@ -120,7 +120,7 @@ void remove_server_from_workgroup(struct work_record *work, struct server_record work->serverlist = servrec->next; ZERO_STRUCTP(servrec); - free((char *)servrec); + SAFE_FREE((char *)servrec); work->subnet->work_changed = True; } diff --git a/source/nmbd/nmbd_subnetdb.c b/source/nmbd/nmbd_subnetdb.c index 33b4b050f06..8516eb425eb 100644 --- a/source/nmbd/nmbd_subnetdb.c +++ b/source/nmbd/nmbd_subnetdb.c @@ -186,7 +186,7 @@ static struct subnet_record *make_subnet(char *name, enum subnet_type type, close(nmb_sock); close(dgram_sock); ZERO_STRUCTP(subrec); - free((char *)subrec); + SAFE_FREE((char *)subrec); return(NULL); } diff --git a/source/nmbd/nmbd_synclists.c b/source/nmbd/nmbd_synclists.c index 8670a45a680..1132d9a5147 100644 --- a/source/nmbd/nmbd_synclists.c +++ b/source/nmbd/nmbd_synclists.c @@ -297,7 +297,7 @@ void sync_check_completion(void) complete_sync(s); DLIST_REMOVE(syncs, s); ZERO_STRUCTP(s); - free(s); + SAFE_FREE(s); } } } diff --git a/source/nmbd/nmbd_winsproxy.c b/source/nmbd/nmbd_winsproxy.c index 2f50881d297..460c72a9c77 100644 --- a/source/nmbd/nmbd_winsproxy.c +++ b/source/nmbd/nmbd_winsproxy.c @@ -81,7 +81,7 @@ returned for name %s.\n", nmb_namestr(nmbname) )); WINS_PROXY_NAME, num_ips, iplist ); if(iplist != &ip) - free((char *)iplist); + SAFE_FREE((char *)iplist); /* * Check that none of the IP addresses we are returning is on the @@ -159,7 +159,7 @@ static struct userdata_struct *wins_proxy_userdata_copy_fn(struct userdata_struc /* Do a deep copy of the packet. */ if((copy_of_p = copy_packet(p)) == NULL) { - free((char *)new_userdata); + SAFE_FREE((char *)new_userdata); return NULL; } @@ -190,7 +190,7 @@ static void wins_proxy_userdata_free_fn(struct userdata_struct *userdata) free_packet(p); ZERO_STRUCTP(userdata); - free((char *)userdata); + SAFE_FREE((char *)userdata); } /**************************************************************************** diff --git a/source/nmbd/nmbd_winsserver.c b/source/nmbd/nmbd_winsserver.c index 8be182563a7..15cb2fcb6fc 100644 --- a/source/nmbd/nmbd_winsserver.c +++ b/source/nmbd/nmbd_winsserver.c @@ -299,7 +299,7 @@ BOOL initialise_wins(void) if(nb_flags_str[strlen(nb_flags_str)-1] == 'S') { DEBUG(5,("initialise_wins: Ignoring SELF name %s\n", line)); - free((char *)ip_list); + SAFE_FREE((char *)ip_list); continue; } @@ -338,7 +338,7 @@ BOOL initialise_wins(void) name, type, ttl, inet_ntoa(ip_list[0]), nb_flags)); } - free((char *)ip_list); + SAFE_FREE((char *)ip_list); } fclose(fp); @@ -1280,7 +1280,7 @@ static void process_wins_dmb_query_request(struct subnet_record *subrec, prdata, /* data to send. */ num_ips*6); /* data length. */ - free(prdata); + SAFE_FREE(prdata); } /**************************************************************************** @@ -1338,7 +1338,7 @@ void send_wins_name_query_response(int rcode, struct packet_struct *p, reply_data_len); /* data length. */ if((prdata != rdata) && (prdata != NULL)) - free(prdata); + SAFE_FREE(prdata); } /*********************************************************************** diff --git a/source/nsswitch/winbind_nss.c b/source/nsswitch/winbind_nss.c index 4579d167d2b..bbeae45b0ed 100644 --- a/source/nsswitch/winbind_nss.c +++ b/source/nsswitch/winbind_nss.c @@ -108,7 +108,7 @@ winbind_xid_lookup(int xid, struct winbindd_request **requestp) *last = dx->next; result = dx->rq; *requestp = dx->request; - free(dx); + SAFE_FREE(dx); } nsd_logprintf(NSD_LOG_LOW, "entering winbind_xid_lookup xid = %d rq = 0x%x, request = 0x%x\n", @@ -339,7 +339,7 @@ send_next_request(nsd_file_t *rq, struct winbindd_request *request) nsd_logprintf(NSD_LOG_MIN, "send_next_request (winbind) %d to = %d\n", rq->f_cmd_data, timeout); status = winbindd_send_request((int)rq->f_cmd_data,request); - free(request); + SAFE_FREE(request); if (status != NSS_STATUS_SUCCESS) { nsd_logprintf(NSD_LOG_MIN, @@ -413,7 +413,7 @@ int lookup(nsd_file_t *rq) * Don't understand this map - just return not found */ nsd_logprintf(NSD_LOG_MIN, "lookup (winbind) unknown table\n"); - free(request); + SAFE_FREE(request); rq->f_status = NS_NOTFOUND; return NSD_NEXT; } @@ -471,7 +471,7 @@ do_list(int state, nsd_file_t *rq) break; default: nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown state\n"); - free(request); + SAFE_FREE(request); rq->f_status = NS_NOTFOUND; return NSD_NEXT; } @@ -489,7 +489,7 @@ do_list(int state, nsd_file_t *rq) break; default: nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown state\n"); - free(request); + SAFE_FREE(request); rq->f_status = NS_NOTFOUND; return NSD_NEXT; } @@ -498,7 +498,7 @@ do_list(int state, nsd_file_t *rq) * Don't understand this map - just return not found */ nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown table\n"); - free(request); + SAFE_FREE(request); rq->f_status = NS_NOTFOUND; return NSD_NEXT; } diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index 21bea9da301..4c1554faf87 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -263,7 +263,7 @@ static BOOL cm_open_connection(char *domain, char *pipe_name, DEBUG(10, ("cm_open_connection cache entry expired for %s, %s\n", domain, new_conn->controller)); DLIST_REMOVE(open_connection_cache, occ); - free(occ); + SAFE_FREE(occ); break; } @@ -716,7 +716,7 @@ static void dump_conn_list(void) asprintf(&msg, "\t%-15s %-15s %-16s", con->domain, con->controller, con->pipe_name); DEBUG(0, ("%s\n", msg)); - free(msg); + SAFE_FREE(msg); } } diff --git a/source/nsswitch/wins.c b/source/nsswitch/wins.c index 1765320a1d2..a645172e53d 100644 --- a/source/nsswitch/wins.c +++ b/source/nsswitch/wins.c @@ -205,7 +205,7 @@ int lookup(nsd_file_t *rq) if ( status = lookup_byaddr_backend(key, &count)) { size = strlen(key) + 1; if (size > len) { - free(status); + SAFE_FREE(status); return NSD_ERROR; } len -= size; @@ -217,7 +217,7 @@ int lookup(nsd_file_t *rq) if (status[i].type == 0x20) { size = sizeof(status[i].name) + 1; if (size > len) { - free(status); + SAFE_FREE(status); return NSD_ERROR; } len -= size; @@ -227,7 +227,7 @@ int lookup(nsd_file_t *rq) } } response[strlen(response)-1] = '\n'; - free(status); + SAFE_FREE(status); } } else if (strcasecmp(map,"hosts.byname") == 0) { if (ip_list = lookup_byname_backend(key, &count)) { @@ -235,7 +235,7 @@ int lookup(nsd_file_t *rq) addr = inet_ntoa(ip_list[i-1]); size = strlen(addr) + 1; if (size > len) { - free(ip_list); + SAFE_FREE(ip_list); return NSD_ERROR; } len -= size; @@ -246,13 +246,13 @@ int lookup(nsd_file_t *rq) } size = strlen(key) + 1; if (size > len) { - free(ip_list); + SAFE_FREE(ip_list); return NSD_ERROR; } strncat(response,key,size); strncat(response,"\n",1); found = True; - free(ip_list); + SAFE_FREE(ip_list); } } @@ -310,8 +310,7 @@ _nss_wins_gethostbyname_r(const char *name, struct hostent *he, host_addresses++; } - if (ip_list) - free(ip_list); + SAFE_FREE(ip_list); memcpy(buffer, name, namelen); he->h_name = buffer; diff --git a/source/pam_smbpass/pam_smb_auth.c b/source/pam_smbpass/pam_smb_auth.c index 739b1653eeb..e9502165aaa 100644 --- a/source/pam_smbpass/pam_smb_auth.c +++ b/source/pam_smbpass/pam_smb_auth.c @@ -158,7 +158,7 @@ int pam_sm_setcred(pam_handle_t *pamh, int flags, pam_get_data(pamh, "smb_setcred_return", (const void **) &pretval); if(pretval) { retval = *pretval; - free(pretval); + SAFE_FREE(pretval); } pam_set_data(pamh, "smb_setcred_return", NULL, NULL); diff --git a/source/pam_smbpass/pam_smb_passwd.c b/source/pam_smbpass/pam_smb_passwd.c index c2af620672e..da96f375d5a 100644 --- a/source/pam_smbpass/pam_smb_passwd.c +++ b/source/pam_smbpass/pam_smb_passwd.c @@ -167,7 +167,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags, set( SMB__OLD_PASSWD, ctrl ); retval = _smb_read_password( pamh, ctrl, Announce, "Current SMB password: ", NULL, _SMB_OLD_AUTHTOK, &pass_old ); - free( Announce ); + SAFE_FREE( Announce ); if (retval != PAM_SUCCESS) { _log_err( LOG_NOTICE diff --git a/source/pam_smbpass/support.c b/source/pam_smbpass/support.c index 0fd723b75d6..3f5d52cdef2 100644 --- a/source/pam_smbpass/support.c +++ b/source/pam_smbpass/support.c @@ -293,7 +293,7 @@ void _cleanup_failures( pam_handle_t * pamh, void *fl, int err ) } _pam_delete( failure->agent ); /* tidy up */ _pam_delete( failure->user ); /* tidy up */ - free( failure ); + SAFE_FREE( failure ); } } diff --git a/source/param/loadparm.c b/source/param/loadparm.c index e0eea217b45..d9017c07ca1 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -1766,11 +1766,7 @@ static void free_service(service * pservice) pservice->szService)); string_free(&pservice->szService); - if (pservice->copymap) - { - free(pservice->copymap); - pservice->copymap = NULL; - } + SAFE_FREE(pservice->copymap); for (i = 0; parm_table[i].label; i++) if ((parm_table[i].type == P_STRING || @@ -2622,8 +2618,7 @@ initialise a copymap static void init_copymap(service * pservice) { int i; - if (pservice->copymap) - free(pservice->copymap); + SAFE_FREE(pservice->copymap); pservice->copymap = (BOOL *)malloc(sizeof(BOOL) * NUMPARAMETERS); if (!pservice->copymap) DEBUG(0, @@ -3204,7 +3199,7 @@ static void lp_add_auto_services(char *str) lp_add_home(p, homes, home); } } - free(s); + SAFE_FREE(s); } /*************************************************************************** diff --git a/source/param/params.c b/source/param/params.c index d48939bf15c..a7d50601768 100644 --- a/source/param/params.c +++ b/source/param/params.c @@ -119,8 +119,8 @@ static int mygetc(myFILE *f) static void myfile_close(myFILE *f) { if (!f) return; - if (f->buf) free(f->buf); - free(f); + SAFE_FREE(f->buf); + SAFE_FREE(f); } /* -------------------------------------------------------------------------- ** @@ -541,7 +541,7 @@ static myFILE *OpenConfFile( char *FileName ) DEBUG( lvl, ("%s Unable to open configuration file \"%s\":\n\t%s\n", func, FileName, strerror(errno)) ); - free(ret); + SAFE_FREE(ret); return NULL; } @@ -591,7 +591,7 @@ BOOL pm_process( char *FileName, return( False ); } result = Parse( InFile, sfunc, pfunc ); - free( bufr ); + SAFE_FREE( bufr ); bufr = NULL; bSize = 0; } diff --git a/source/printing/pcap.c b/source/printing/pcap.c index 34bd8db981b..a2ca0b7dcb4 100644 --- a/source/printing/pcap.c +++ b/source/printing/pcap.c @@ -112,7 +112,7 @@ static void ScanQconfig_fn(char *psz,void (*fn)(char *, char *)) iEtat = 0; /* scan qconfig file for searching <printername>: */ - for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line)) + for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line)) { if (*line == '*' || *line == 0) continue; @@ -182,7 +182,7 @@ static BOOL ScanQconfig(char *psz,char *pszPrintername) if ((pfile = sys_fopen(psz, "r")) == NULL) { DEBUG(0,( "Unable to open qconfig file %s for read!\n", psz)); - free(pName); + SAFE_FREE(pName); return(False); } slprintf(pName, iLg + 9, "%s:",pszPrintername); @@ -190,7 +190,7 @@ static BOOL ScanQconfig(char *psz,char *pszPrintername) /*DEBUG(3,( " Looking for entry %s\n",pName));*/ iEtat = 0; /* scan qconfig file for searching <printername>: */ - for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line)) + for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line)) { if (*line == '*' || *line == 0) continue; @@ -209,8 +209,8 @@ static BOOL ScanQconfig(char *psz,char *pszPrintername) { /* name is found without stanza device */ /* probably a good printer ??? */ - free (line); - free(pName); + SAFE_FREE (line); + SAFE_FREE(pName); fclose(pfile); return(True); } @@ -223,15 +223,15 @@ static BOOL ScanQconfig(char *psz,char *pszPrintername) else if (strlocate(line,"device")) { /* it's a good virtual printer */ - free (line); - free(pName); + SAFE_FREE (line); + SAFE_FREE(pName); fclose(pfile); return(True); } break; } } - free (pName); + SAFE_FREE (pName); fclose(pfile); return(False); } @@ -289,7 +289,7 @@ BOOL pcap_printername_ok(char *pszPrintername, char *pszPrintcapname) return(False); } - for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line)) + for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line)) { if (*line == '#' || *line == 0) continue; @@ -310,7 +310,7 @@ BOOL pcap_printername_ok(char *pszPrintername, char *pszPrintcapname) { /* normalise the case */ pstrcpy(pszPrintername,p); - free(line); + SAFE_FREE(line); fclose(pfile); return(True); } @@ -372,7 +372,7 @@ void pcap_printer_fn(void (*fn)(char *, char *)) return; } - for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line)) + for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line)) { if (*line == '#' || *line == 0) continue; diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c index 61c839733c8..327811dd9fe 100644 --- a/source/printing/print_cups.c +++ b/source/printing/print_cups.c @@ -823,7 +823,7 @@ cups_queue_get(int snum, print_queue_struct **q, print_status_struct *status) ippDelete(response); httpClose(http); - free (queue); + SAFE_FREE(queue); return (0); } diff --git a/source/printing/printing.c b/source/printing/printing.c index 42e36c2b666..df2dbd252e7 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -108,7 +108,7 @@ static struct printjob *print_job_find(int jobid) if (!ret.dptr || ret.dsize != sizeof(pjob)) return NULL; memcpy(&pjob, ret.dptr, sizeof(pjob)); - free(ret.dptr); + SAFE_FREE(ret.dptr); return &pjob; } @@ -282,7 +282,7 @@ static pid_t get_updating_pid(fstring printer_name) return (pid_t)-1; memcpy(&updating_pid, data.dptr, sizeof(pid_t)); - free(data.dptr); + SAFE_FREE(data.dptr); if (process_exists(updating_pid)) return updating_pid; @@ -794,7 +794,7 @@ static int get_queue_status(int snum, print_status_struct *status) if (data.dsize == sizeof(print_status_struct)) { memcpy(status, data.dptr, sizeof(print_status_struct)); } - free(data.dptr); + SAFE_FREE(data.dptr); } return status->qcount; } @@ -1162,7 +1162,7 @@ int print_queue_status(int snum, if (data.dsize == sizeof(*status)) { memcpy(status, data.dptr, sizeof(*status)); } - free(data.dptr); + SAFE_FREE(data.dptr); } /* diff --git a/source/rpc_server/srv_lsa_hnd.c b/source/rpc_server/srv_lsa_hnd.c index bce9e68a56f..62a04e875ac 100644 --- a/source/rpc_server/srv_lsa_hnd.c +++ b/source/rpc_server/srv_lsa_hnd.c @@ -192,7 +192,7 @@ BOOL close_policy_hnd(pipes_struct *p, POLICY_HND *hnd) ZERO_STRUCTP(pol); - free(pol); + SAFE_FREE(pol); return True; } @@ -215,7 +215,7 @@ void close_policy_by_pipe(pipes_struct *p) p->pipe_handles->Policy = NULL; p->pipe_handles->count = 0; - free(p->pipe_handles); + SAFE_FREE(p->pipe_handles); p->pipe_handles = NULL; DEBUG(10,("close_policy_by_pipe: deleted handle list for pipe %s\n", p->name )); } diff --git a/source/smbd/close.c b/source/smbd/close.c index fc0e6a4e1d9..fdb95a634be 100644 --- a/source/smbd/close.c +++ b/source/smbd/close.c @@ -100,10 +100,7 @@ static int close_filestruct(files_struct *fsp) fsp->stat_open = False; conn->num_files_open--; - if(fsp->wbmpx_ptr) { - free((char *)fsp->wbmpx_ptr); - fsp->wbmpx_ptr = NULL; - } + SAFE_FREE((char *)fsp->wbmpx_ptr); return ret; } diff --git a/source/smbd/conn.c b/source/smbd/conn.c index ba1efca3f76..7e8a8383213 100644 --- a/source/smbd/conn.c +++ b/source/smbd/conn.c @@ -175,7 +175,7 @@ void conn_free(connection_struct *conn) DLIST_REMOVE(Connections, conn); if (conn->ngroups && conn->groups) { - free(conn->groups); + SAFE_FREE(conn->groups); conn->groups = NULL; conn->ngroups = 0; } @@ -194,7 +194,7 @@ void conn_free(connection_struct *conn) num_open--; ZERO_STRUCTP(conn); - free(conn); + SAFE_FREE(conn); } diff --git a/source/smbd/dir.c b/source/smbd/dir.c index d7213c8259b..809e8612a17 100644 --- a/source/smbd/dir.c +++ b/source/smbd/dir.c @@ -244,10 +244,9 @@ static void dptr_close_internal(dptr_struct *dptr) } /* Lanman 2 specific code */ - if (dptr->wcard) - free(dptr->wcard); + SAFE_FREE(dptr->wcard); string_set(&dptr->path,""); - free((char *)dptr); + SAFE_FREE((char *)dptr); } /**************************************************************************** @@ -436,7 +435,7 @@ int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect if(dptr->dnum == -1 || dptr->dnum > 254) { DEBUG(0,("dptr_create: returned %d: Error - all old dirptrs in use ?\n", dptr->dnum)); - free((char *)dptr); + SAFE_FREE((char *)dptr); return -1; } } @@ -465,7 +464,7 @@ int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect if(dptr->dnum == -1 || dptr->dnum < 255) { DEBUG(0,("dptr_create: returned %d: Error - all new dirptrs in use ?\n", dptr->dnum)); - free((char *)dptr); + SAFE_FREE((char *)dptr); return -1; } } @@ -767,7 +766,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { ret = user_can_read_file(conn, entry); - free(entry); + SAFE_FREE(entry); } if (!ret) continue; } @@ -802,8 +801,8 @@ void CloseDir(void *p) { Dir *dirp = (Dir *)p; if (!dirp) return; - if (dirp->data) free(dirp->data); - free(dirp); + SAFE_FREE(dirp->data); + SAFE_FREE(dirp); } /******************************************************************* @@ -912,7 +911,7 @@ void DirCacheAdd( char *path, char *name, char *dname, int snum ) /* Free excess cache entries. */ while( DIRCACHESIZE < dir_cache->count ) - free( ubi_dlRemTail( dir_cache ) ); + safe_free( ubi_dlRemTail( dir_cache ) ); } @@ -964,7 +963,7 @@ void DirCacheFlush(int snum) NULL != entry; ) { next = ubi_dlNext( entry ); if( entry->snum == snum ) - free( ubi_dlRemThis( dir_cache, entry ) ); + safe_free( ubi_dlRemThis( dir_cache, entry ) ); entry = (dir_cache_entry *)next; } } diff --git a/source/smbd/error.c b/source/smbd/error.c index 3c829deb09d..78425fafc66 100644 --- a/source/smbd/error.c +++ b/source/smbd/error.c @@ -37,8 +37,7 @@ int cached_error_packet(char *outbuf,files_struct *fsp,int line,const char *file int32 err = wbmpx->wr_error; /* We can now delete the auxiliary struct */ - free((char *)wbmpx); - fsp->wbmpx_ptr = NULL; + SAFE_FREE((char *)wbmpx); return error_packet(outbuf,NT_STATUS_OK,eclass,err,line,file); } diff --git a/source/smbd/fileio.c b/source/smbd/fileio.c index fbcdc883b38..af119020d82 100644 --- a/source/smbd/fileio.c +++ b/source/smbd/fileio.c @@ -496,10 +496,8 @@ void delete_write_cache(files_struct *fsp) SMB_ASSERT(wcp->data_size == 0); - free(wcp->data); - free(wcp); - - fsp->wcp = NULL; + SAFE_FREE(wcp->data); + SAFE_FREE(wcp); DEBUG(10,("delete_write_cache: File %s deleted write cache\n", fsp->fsp_name )); @@ -532,7 +530,7 @@ static BOOL setup_write_cache(files_struct *fsp, SMB_OFF_T file_size) if((wcp->data = malloc(wcp->alloc_size)) == NULL) { DEBUG(0,("setup_write_cache: malloc fail for buffer size %u.\n", (unsigned int)wcp->alloc_size )); - free(wcp); + SAFE_FREE(wcp); return False; } diff --git a/source/smbd/files.c b/source/smbd/files.c index c845cb19c4b..3935a12442b 100644 --- a/source/smbd/files.c +++ b/source/smbd/files.c @@ -344,7 +344,7 @@ void file_free(files_struct *fsp) if (fsp == chain_fsp) chain_fsp = NULL; - free(fsp); + SAFE_FREE(fsp); } /**************************************************************************** diff --git a/source/smbd/groupname.c b/source/smbd/groupname.c index d7566ff5354..1cdca50e65f 100644 --- a/source/smbd/groupname.c +++ b/source/smbd/groupname.c @@ -52,11 +52,9 @@ static void delete_groupname_map_list(void) groupname_map_entry *gmep; while((gmep = (groupname_map_entry *)ubi_slRemHead( &groupname_map_list )) != NULL) { - if(gmep->windows_name) - free(gmep->windows_name); - if(gmep->unix_name) - free(gmep->unix_name); - free((char *)gmep); + SAFE_FREE(gmep->windows_name); + SAFE_FREE(gmep->unix_name); + SAFE_FREE((char *)gmep); } } @@ -187,11 +185,9 @@ Error was %s.\n", unixname, strerror(errno) )); if(new_ep->windows_name == NULL || new_ep->unix_name == NULL) { DEBUG(0,("load_groupname_map: malloc fail for names in groupname_map_entry.\n")); fclose(fp); - if(new_ep->windows_name != NULL) - free(new_ep->windows_name); - if(new_ep->unix_name != NULL) - free(new_ep->unix_name); - free((char *)new_ep); + SAFE_FREE(new_ep->windows_name); + SAFE_FREE(new_ep->unix_name); + SAFE_FREE((char *)new_ep); file_lines_free(lines); return; } diff --git a/source/smbd/ipc.c b/source/smbd/ipc.c index ebd29ecbe89..e1c3e7fe4d3 100644 --- a/source/smbd/ipc.c +++ b/source/smbd/ipc.c @@ -183,13 +183,13 @@ static BOOL api_rpc_trans_reply(char *outbuf, pipes_struct *p) } if((data_len = read_from_pipe( p, rdata, p->max_trans_reply)) < 0) { - free(rdata); + SAFE_FREE(rdata); return False; } send_trans_reply(outbuf, NULL, 0, rdata, data_len, p->out_data.current_pdu_len > data_len); - free(rdata); + SAFE_FREE(rdata); return True; } @@ -442,12 +442,9 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf, int size, int DEBUG(0,("reply_trans: %s in getting secondary trans response.\n", (smb_read_error == READ_ERROR) ? "error" : "timeout" )); } - if (params) - free(params); - if (data) - free(data); - if (setup) - free(setup); + SAFE_FREE(params); + SAFE_FREE(data); + SAFE_FREE(setup); END_PROFILE(SMBtrans); return(ERROR_DOS(ERRSRV,ERRerror)); } @@ -509,12 +506,9 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf, int size, int } - if (data) - free(data); - if (params) - free(params); - if (setup) - free(setup); + SAFE_FREE(data); + SAFE_FREE(params); + SAFE_FREE(setup); if (close_on_completion) close_cnum(conn,vuid); diff --git a/source/smbd/mangle.c b/source/smbd/mangle.c index 7ef4107df7b..3d214d46589 100644 --- a/source/smbd/mangle.c +++ b/source/smbd/mangle.c @@ -465,7 +465,7 @@ static signed int cache_compare( ubi_btItemPtr ItemPtr, ubi_btNodePtr NodePtr ) static void cache_free_entry( ubi_trNodePtr WarrenZevon ) { ZERO_STRUCTP(WarrenZevon); - free( WarrenZevon ); + SAFE_FREE( WarrenZevon ); } /* cache_free_entry */ /* ************************************************************************** ** @@ -632,7 +632,7 @@ BOOL check_mangled_cache( char *s ) { /* Replace the saved_ext as it was truncated. */ (void)pstrcat( s, saved_ext ); - free(saved_ext); + SAFE_FREE(saved_ext); } return( False ); } @@ -648,7 +648,7 @@ BOOL check_mangled_cache( char *s ) { /* Replace the saved_ext as it was truncated. */ (void)pstrcat( s, saved_ext ); - free(saved_ext); + SAFE_FREE(saved_ext); } DEBUG( 3, ("as %s\n", s) ); @@ -1016,7 +1016,7 @@ BOOL name_map_mangle(char *OutName, BOOL need83, BOOL cache83, int snum) if(tmp != NULL) { cache_mangled_name(OutName, tmp); - free(tmp); + SAFE_FREE(tmp); } } diff --git a/source/smbd/notify_hash.c b/source/smbd/notify_hash.c index 178dcecc823..90eb88ac814 100644 --- a/source/smbd/notify_hash.c +++ b/source/smbd/notify_hash.c @@ -195,7 +195,7 @@ static BOOL hash_check_notify(connection_struct *conn, uint16 vuid, char *path, static void hash_remove_notify(void *datap) { - free(datap); + SAFE_FREE(datap); } /**************************************************************************** diff --git a/source/smbd/notify_kernel.c b/source/smbd/notify_kernel.c index 224581abec4..96164a3199b 100644 --- a/source/smbd/notify_kernel.c +++ b/source/smbd/notify_kernel.c @@ -110,7 +110,7 @@ static void kernel_remove_notify(void *datap) } close(fd); } - free(data); + SAFE_FREE(data); DEBUG(3,("removed kernel change notify fd=%d\n", fd)); } diff --git a/source/smbd/open.c b/source/smbd/open.c index 5b7844b83a2..309bc0be873 100644 --- a/source/smbd/open.c +++ b/source/smbd/open.c @@ -503,7 +503,7 @@ dev = %x, inode = %.0f\n", *p_oplock_request, share_entry->op_type, fname, (unsi if(opb_ret == False) { DEBUG(0,("open_mode_check: FAILED when breaking oplock (%x) on file %s, \ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (double)inode)); - free((char *)old_shares); + SAFE_FREE((char *)old_shares); errno = EACCES; unix_ERR_class = ERRDOS; unix_ERR_code = ERRbadshare; @@ -522,7 +522,7 @@ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (dou if we can too */ if(check_share_mode(conn, share_entry, share_mode, fname, fcbopen, p_flags) == False) { - free((char *)old_shares); + SAFE_FREE((char *)old_shares); errno = EACCES; return -1; } @@ -530,7 +530,7 @@ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (dou } /* end for */ if(broke_oplock) { - free((char *)old_shares); + SAFE_FREE((char *)old_shares); num_share_modes = get_share_modes(conn, dev, inode, &old_shares); oplock_contention_count++; @@ -566,7 +566,7 @@ dev = %x, inode = %.0f. Deleting it to continue...\n", (int)broken_entry.pid, fn * other process's entry. */ - free((char *)old_shares); + SAFE_FREE((char *)old_shares); num_share_modes = get_share_modes(conn, dev, inode, &old_shares); break; } @@ -575,8 +575,7 @@ dev = %x, inode = %.0f. Deleting it to continue...\n", (int)broken_entry.pid, fn } while(broke_oplock); - if(old_shares != 0) - free((char *)old_shares); + SAFE_FREE((char *)old_shares); /* * Refuse to grant an oplock in case the contention limit is @@ -1282,7 +1281,7 @@ dev = %x, inode = %.0f\n", share_entry->op_type, fname, (unsigned int)dev, (doub DEBUG(0,("check_file_sharing: FAILED when breaking oplock (%x) on file %s, \ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (double)inode)); - free((char *)old_shares); + SAFE_FREE((char *)old_shares); return False; } lock_share_entry(conn, dev, inode); @@ -1312,7 +1311,7 @@ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (dou if(broke_oplock) { - free((char *)old_shares); + SAFE_FREE((char *)old_shares); num_share_modes = get_share_modes(conn, dev, inode, &old_shares); } } while(broke_oplock); @@ -1333,7 +1332,6 @@ dev = %x, inode = %.0f\n", old_shares[i].op_type, fname, (unsigned int)dev, (dou free_and_exit: unlock_share_entry(conn, dev, inode); - if(old_shares != NULL) - free((char *)old_shares); + SAFE_FREE((char *)old_shares); return(ret); } diff --git a/source/smbd/oplock.c b/source/smbd/oplock.c index 0fe2de94320..9d285d4ae38 100644 --- a/source/smbd/oplock.c +++ b/source/smbd/oplock.c @@ -1162,8 +1162,7 @@ void release_level_2_oplocks_on_change(files_struct *fsp) } } - if (share_list) - free((char *)share_list); + SAFE_FREE((char *)share_list); unlock_share_entry_fsp(fsp); /* Paranoia check... */ diff --git a/source/smbd/password.c b/source/smbd/password.c index 8661811484f..d6d4c931748 100644 --- a/source/smbd/password.c +++ b/source/smbd/password.c @@ -197,7 +197,7 @@ NT_USER_TOKEN *create_nt_token(uid_t uid, gid_t gid, int ngroups, gid_t *groups, num_sids += sup_tok->num_sids; if ((token->user_sids = (DOM_SID *)malloc( num_sids*sizeof(DOM_SID))) == NULL) { - free(token); + SAFE_FREE(token); return NULL; } @@ -801,7 +801,7 @@ and given password ok\n", user)); } } - free(user_list); + SAFE_FREE(user_list); } /* check for a previously validated username/password pair */ @@ -1067,7 +1067,7 @@ struct cli_state *server_cryptkey(void) } } - free(pserver); + SAFE_FREE(pserver); if (!connected_ok) { DEBUG(0,("password server not available\n")); @@ -1432,9 +1432,7 @@ static BOOL find_connect_pdc(struct cli_state *pcli, unsigned char *trust_passwd } } - if(ip_list != NULL) - free((char *)ip_list); - + SAFE_FREE((char *)ip_list); return connected_ok; } @@ -1607,7 +1605,7 @@ BOOL domain_client_validate( char *user, char *domain, ptok->num_sids = (size_t)info3.num_groups2; if ((ptok->user_sids = (DOM_SID *)malloc( sizeof(DOM_SID) * ptok->num_sids )) == NULL) { DEBUG(0, ("domain_client_validate: Out of memory allocating group SIDS\n")); - free(ptok); + SAFE_FREE(ptok); return False; } diff --git a/source/smbd/process.c b/source/smbd/process.c index 04780cf5d5f..b6a0c28f18e 100644 --- a/source/smbd/process.c +++ b/source/smbd/process.c @@ -85,7 +85,7 @@ static BOOL push_message(ubi_slList *list_head, char *buf, int msg_len) if(msg->msg_buf == NULL) { DEBUG(0,("push_message: malloc fail (2)\n")); - free((char *)msg); + SAFE_FREE((char *)msg); return False; } @@ -178,8 +178,8 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout) memcpy(buffer, msg->msg_buf, MIN(buffer_len, msg->msg_len)); /* Free the message we just copied. */ - free((char *)msg->msg_buf); - free((char *)msg); + SAFE_FREE((char *)msg->msg_buf); + SAFE_FREE((char *)msg); DEBUG(5,("receive_message_or_smb: returning queued smb message.\n")); return True; diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 1105d8884cd..4e286afe9f1 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -4815,8 +4815,7 @@ int reply_writebs(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz if (nwritten < (ssize_t)numtowrite) { if(write_through) { /* We are returning an error - we can delete the aux struct */ - if (wbms) - free((char *)wbms); + SAFE_FREE((char *)wbms); fsp->wbmpx_ptr = NULL; END_PROFILE(SMBwriteBs); return(ERROR_DOS(ERRHRD,ERRdiskfull)); @@ -4835,7 +4834,7 @@ int reply_writebs(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz send_response = True; } - free((char *)wbms); + SAFE_FREE((char *)wbms); fsp->wbmpx_ptr = NULL; } diff --git a/source/smbd/vfs.c b/source/smbd/vfs.c index 54e11976d7b..499072dcd8f 100644 --- a/source/smbd/vfs.c +++ b/source/smbd/vfs.c @@ -679,7 +679,7 @@ static void array_promote(char *array,int elsize,int element) memcpy(p,array + element * elsize, elsize); memmove(array + elsize,array,elsize*element); memcpy(array,p,elsize); - free(p); + SAFE_FREE(p); } /******************************************************************* diff --git a/source/smbwrapper/smbw.c b/source/smbwrapper/smbw.c index da205560495..ae2f5f01581 100644 --- a/source/smbwrapper/smbw.c +++ b/source/smbwrapper/smbw.c @@ -282,13 +282,13 @@ static char *smbw_find_workgroup(void) slprintf(server, sizeof(server), "%s#1D", name); if (smbw_server(server, "IPC$")) { smbw_setshared("WORKGROUP", name); - free(ip_list); + SAFE_FREE(ip_list); return name; } } } - free(ip_list); + SAFE_FREE(ip_list); return p; } @@ -607,9 +607,9 @@ struct smbw_server *smbw_server(char *server, char *share) cli_shutdown(&c); if (!srv) return NULL; - if (srv->server_name) free(srv->server_name); - if (srv->share_name) free(srv->share_name); - free(srv); + SAFE_FREE(srv->server_name); + SAFE_FREE(srv->share_name); + SAFE_FREE(srv); return NULL; } @@ -723,12 +723,10 @@ int smbw_open(const char *fname, int flags, mode_t mode) } if (file) { if (file->f) { - if (file->f->fname) { - free(file->f->fname); - } - free(file->f); + SAFE_FREE(file->f->fname); + SAFE_FREE(file->f); } - free(file); + SAFE_FREE(file); } smbw_busy--; return -1; @@ -893,11 +891,11 @@ int smbw_close(int fd) file->f->ref_count--; if (file->f->ref_count == 0) { - free(file->f->fname); - free(file->f); + SAFE_FREE(file->f->fname); + SAFE_FREE(file->f); } ZERO_STRUCTP(file); - free(file); + SAFE_FREE(file); smbw_busy--; @@ -1385,14 +1383,14 @@ static void smbw_srv_close(struct smbw_server *srv) cli_shutdown(&srv->cli); - free(srv->server_name); - free(srv->share_name); + SAFE_FREE(srv->server_name); + SAFE_FREE(srv->share_name); DLIST_REMOVE(smbw_srvs, srv); ZERO_STRUCTP(srv); - free(srv); + SAFE_FREE(srv); smbw_busy--; } diff --git a/source/smbwrapper/smbw_dir.c b/source/smbwrapper/smbw_dir.c index a1069c535e6..a056a2ae752 100644 --- a/source/smbwrapper/smbw_dir.c +++ b/source/smbwrapper/smbw_dir.c @@ -63,12 +63,10 @@ free a smbw_dir structure and all entries *******************************************************/ static void free_dir(struct smbw_dir *dir) { - if (dir->list) { - free(dir->list); - } - if (dir->path) free(dir->path); + SAFE_FREE(dir->list); + SAFE_FREE(dir->path); ZERO_STRUCTP(dir); - free(dir); + SAFE_FREE(dir); } diff --git a/source/tdb/spinlock.c b/source/tdb/spinlock.c index 0b2994f8f58..b00d115dde7 100644 --- a/source/tdb/spinlock.c +++ b/source/tdb/spinlock.c @@ -384,11 +384,11 @@ int tdb_create_rwlocks(int fd, unsigned int hash_size) /* Write it out (appending to end) */ if (write(fd, rwlocks, size) != size) { - free(rwlocks); + SAFE_FREE(rwlocks); return -1; } smp_machine = this_is_smp(); - free(rwlocks); + SAFE_FREE(rwlocks); return 0; } diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c index 28425c29892..16cda03a3c1 100644 --- a/source/tdb/tdb.c +++ b/source/tdb/tdb.c @@ -343,7 +343,7 @@ static char *tdb_alloc_read(TDB_CONTEXT *tdb, tdb_off offset, tdb_len len) return TDB_ERRCODE(TDB_ERR_OOM, buf); } if (tdb_read(tdb, offset, buf, len, 0) == -1) { - free(buf); + SAFE_FREE(buf); return NULL; } return buf; @@ -855,7 +855,7 @@ static int tdb_new_database(TDB_CONTEXT *tdb, int hash_size) ret = tdb_create_rwlocks(tdb->fd, hash_size); fail: - free(newdb); + SAFE_FREE(newdb); return ret; } @@ -884,10 +884,10 @@ static tdb_off tdb_find(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash, return 0; if (memcmp(key.dptr, k, key.dsize) == 0) { - free(k); + SAFE_FREE(k); return rec_ptr; } - free(k); + SAFE_FREE(k); } rec_ptr = r->next; } @@ -1195,10 +1195,10 @@ int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *state) /* They want us to terminate traversal */ unlock_record(tdb, tl.off); tdb->travlocks.next = tl.next; - free(key.dptr); + SAFE_FREE(key.dptr); return count; } - free(key.dptr); + SAFE_FREE(key.dptr); } tdb->travlocks.next = tl.next; if (ret < 0) @@ -1248,8 +1248,7 @@ TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA oldkey) tdb->travlocks.off = 0; } - if (k) - free(k); + SAFE_FREE(k); } if (!tdb->travlocks.off) { @@ -1367,8 +1366,7 @@ int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag) ret = -1; } out: - if (p) - free(p); + SAFE_FREE(p); tdb_unlock(tdb, BUCKET(hash), F_WRLCK); return ret; } @@ -1552,16 +1550,14 @@ TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags, if (tdb->map_ptr) { if (tdb->flags & TDB_INTERNAL) - free(tdb->map_ptr); + SAFE_FREE(tdb->map_ptr); else tdb_munmap(tdb); } - if (tdb->name) - free(tdb->name); + SAFE_FREE(tdb->name); if (tdb->fd != -1) close(tdb->fd); - if (tdb->locked) - free(tdb->locked); + SAFE_FREE(tdb->locked); errno = save_errno; return NULL; } @@ -1575,18 +1571,15 @@ int tdb_close(TDB_CONTEXT *tdb) if (tdb->map_ptr) { if (tdb->flags & TDB_INTERNAL) - free(tdb->map_ptr); + SAFE_FREE(tdb->map_ptr); else tdb_munmap(tdb); } - if (tdb->name) - free(tdb->name); + SAFE_FREE(tdb->name); if (tdb->fd != -1) ret = close(tdb->fd); - if (tdb->locked) - free(tdb->locked); - if (tdb->lockedkeys) - free(tdb->lockedkeys); + SAFE_FREE(tdb->locked); + SAFE_FREE(tdb->lockedkeys); /* Remove from contexts list */ for (i = &tdbs; *i; i = &(*i)->next) { @@ -1597,7 +1590,7 @@ int tdb_close(TDB_CONTEXT *tdb) } memset(tdb, 0, sizeof(*tdb)); - free(tdb); + SAFE_FREE(tdb); return ret; } @@ -1662,8 +1655,7 @@ int tdb_lockkeys(TDB_CONTEXT *tdb, u32 number, TDB_DATA keys[]) if (i < number) { for ( j = 0; j < i; j++) tdb_unlock(tdb, j, F_WRLCK); - free(tdb->lockedkeys); - tdb->lockedkeys = NULL; + SAFE_FREE(tdb->lockedkeys); return TDB_ERRCODE(TDB_ERR_NOLOCK, -1); } return 0; @@ -1675,8 +1667,7 @@ void tdb_unlockkeys(TDB_CONTEXT *tdb) u32 i; for (i = 0; i < tdb->lockedkeys[0]; i++) tdb_unlock(tdb, tdb->lockedkeys[i+1], F_WRLCK); - free(tdb->lockedkeys); - tdb->lockedkeys = NULL; + SAFE_FREE(tdb->lockedkeys); } /* lock/unlock one hash chain. This is meant to be used to reduce diff --git a/source/tdb/tdb.h b/source/tdb/tdb.h index 6877e5cdf49..7c1c7bd8c2b 100644 --- a/source/tdb/tdb.h +++ b/source/tdb/tdb.h @@ -134,6 +134,12 @@ void tdb_dump_all(TDB_CONTEXT *tdb); void tdb_printfreelist(TDB_CONTEXT *tdb); extern TDB_DATA tdb_null; + +/* free memory if the pointer is valid and zero the pointer */ +#ifndef SAFE_FREE +#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) +#endif + #ifdef __cplusplus } #endif diff --git a/source/tdb/tdbtest.c b/source/tdb/tdbtest.c index 0741073ce11..80e9c8d07e6 100644 --- a/source/tdb/tdbtest.c +++ b/source/tdb/tdbtest.c @@ -71,9 +71,9 @@ static void compare_db(void) } nextkey = tdb_nextkey(db, key); - free(key.dptr); - free(d.dptr); - free(gd.dptr); + SAFE_FREE(key.dptr); + SAFE_FREE(d.dptr); + SAFE_FREE(gd.dptr); key = nextkey; } @@ -92,9 +92,9 @@ static void compare_db(void) } gnextkey = gdbm_nextkey(gdbm, gkey); - free(gkey.dptr); - free(gd.dptr); - free(d.dptr); + SAFE_FREE(gkey.dptr); + SAFE_FREE(gd.dptr); + SAFE_FREE(d.dptr); gkey = gnextkey; } } @@ -138,11 +138,11 @@ static void addrec_db(void) } } else { data = tdb_fetch(db, key); - if (data.dptr) free(data.dptr); + SAFE_FREE(data.dptr); } - free(k); - free(d); + SAFE_FREE(k); + SAFE_FREE(d); } static void addrec_gdbm(void) @@ -171,11 +171,11 @@ static void addrec_gdbm(void) } } else { data = gdbm_fetch(gdbm, key); - if (data.dptr) free(data.dptr); + SAFE_FREE(data.dptr); } - free(k); - free(d); + SAFE_FREE(k); + SAFE_FREE(d); } static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state) diff --git a/source/tdb/tdbtorture.c b/source/tdb/tdbtorture.c index c4d912a1477..0cdb60db6ee 100644 --- a/source/tdb/tdbtorture.c +++ b/source/tdb/tdbtorture.c @@ -43,7 +43,7 @@ static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...) char *ptr; asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid()); system(ptr); - free(ptr); + SAFE_FREE(ptr); } #endif } @@ -129,7 +129,7 @@ static void addrec_db(void) if (tdb_store(db, key, data, TDB_REPLACE) != 0) { fatal("tdb_store failed"); } - if (data.dptr) free(data.dptr); + SAFE_FREE(data.dptr); tdb_chainunlock(db, lockkey); goto next; } @@ -143,12 +143,12 @@ static void addrec_db(void) #endif data = tdb_fetch(db, key); - if (data.dptr) free(data.dptr); + SAFE_FREE(data.dptr); next: - free(k); - free(d); - free(s); + SAFE_FREE(k); + SAFE_FREE(d); + SAFE_FREE(s); } static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, diff --git a/source/tdb/tdbutil.c b/source/tdb/tdbutil.c index 9e24562118f..80a656e432b 100644 --- a/source/tdb/tdbutil.c +++ b/source/tdb/tdbutil.c @@ -68,7 +68,7 @@ int tdb_fetch_int_byblob(TDB_CONTEXT *tdb, char *keyval, size_t len) return -1; memcpy(&ret, data.dptr, sizeof(int)); - free(data.dptr); + SAFE_FREE(data.dptr); return ret; } @@ -374,7 +374,7 @@ static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...) return; DEBUG(level, ("tdb(%s): %s", tdb->name, ptr)); - free(ptr); + SAFE_FREE(ptr); } /**************************************************************************** diff --git a/source/utils/locktest.c b/source/utils/locktest.c index 80dbba1e37e..4697067e881 100644 --- a/source/utils/locktest.c +++ b/source/utils/locktest.c @@ -217,7 +217,7 @@ static void reconnect(struct cli_state *cli[NSERVERS][NCONNECTIONS], int fnum[NS } cli_ulogoff(cli[server][conn]); cli_shutdown(cli[server][conn]); - free(cli[server][conn]); + SAFE_FREE(cli[server][conn]); cli[server][conn] = NULL; } cli[server][conn] = connect_one(share[server]); diff --git a/source/utils/locktest2.c b/source/utils/locktest2.c index 0391aa29426..91083bc3ec4 100644 --- a/source/utils/locktest2.c +++ b/source/utils/locktest2.c @@ -268,7 +268,7 @@ static void reconnect(struct cli_state *cli[NSERVERS][NCONNECTIONS], } cli_ulogoff(cli[server][conn]); cli_shutdown(cli[server][conn]); - free(cli[server][conn]); + SAFE_FREE(cli[server][conn]); cli[server][conn] = NULL; } cli[server][conn] = connect_one(share[server]); diff --git a/source/utils/make_printerdef.c b/source/utils/make_printerdef.c index a449a24fcdd..f5d40ea3f00 100644 --- a/source/utils/make_printerdef.c +++ b/source/utils/make_printerdef.c @@ -307,7 +307,7 @@ static char *find_desc(FILE *fichier,char *text) if (!strcmp(text,long_desc)) found=1; } - free(chaine); + SAFE_FREE(chaine); if (!found || !crap) return(NULL); while(*crap==' ') crap++; pstrcpy(short_desc,crap); diff --git a/source/utils/make_smbcodepage.c b/source/utils/make_smbcodepage.c index 1bd3edc2631..46b0bf227bb 100644 --- a/source/utils/make_smbcodepage.c +++ b/source/utils/make_smbcodepage.c @@ -99,7 +99,7 @@ static int clean_data( char **buf, size_t *size) newbuf_p += (strlen(newbuf_p) + 1); } - free(*buf); + SAFE_FREE(*buf); *buf = newbuf; return num_lines; } @@ -209,7 +209,7 @@ The maximum size I will believe is 100k.\n", prog_name, size); { fprintf(stderr, "%s: read failed for file %s. Error was %s.\n", prog_name, input_file, strerror(errno)); - free((char *)buf); + SAFE_FREE((char *)buf); fclose(fp); exit(1); } @@ -303,7 +303,7 @@ definition file. File %s has %d.\n", prog_name, MAXCODEPAGELINES, input_file, nu fclose(fp); - free(orig_buf); + SAFE_FREE(orig_buf); return 0; } diff --git a/source/utils/make_unicodemap.c b/source/utils/make_unicodemap.c index 3584facbf62..926f21d85c5 100644 --- a/source/utils/make_unicodemap.c +++ b/source/utils/make_unicodemap.c @@ -96,7 +96,7 @@ static size_t clean_data( char **buf, size_t *size) newbuf_p += (strlen(newbuf_p) + 1); } - free(*buf); + SAFE_FREE(*buf); *buf = newbuf; return num_lines; } @@ -172,7 +172,7 @@ static int do_compile(const char *codepage, const char *input_file, const char * if(fread( buf, 1, size, fp) != size) { fprintf(stderr, "%s: read failed for file %s. Error was %s.\n", prog_name, input_file, strerror(errno)); - free((char *)buf); + SAFE_FREE((char *)buf); fclose(fp); exit(1); } @@ -289,8 +289,8 @@ static int do_compile(const char *codepage, const char *input_file, const char * fclose(fp); - free(orig_buf); - free(output_buf); + SAFE_FREE(orig_buf); + SAFE_FREE(output_buf); return 0; } diff --git a/source/utils/nmblookup.c b/source/utils/nmblookup.c index cf5e8288dd7..2e5bee04f50 100644 --- a/source/utils/nmblookup.c +++ b/source/utils/nmblookup.c @@ -123,7 +123,7 @@ static void do_node_status(int fd, char *name, int type, struct in_addr ip) cleanname,status[i].type, node_status_flags(status[i].flags)); } - free(status); + SAFE_FREE(status); } printf("\n"); } diff --git a/source/utils/smbcacls.c b/source/utils/smbcacls.c index 09c61ff28d3..f65f65fd330 100644 --- a/source/utils/smbcacls.c +++ b/source/utils/smbcacls.c @@ -328,7 +328,7 @@ static BOOL add_ace(SEC_ACL **the_acl, SEC_ACE *ace) memcpy(aces, (*the_acl)->ace, (*the_acl)->num_aces * sizeof(SEC_ACE)); memcpy(aces+(*the_acl)->num_aces, ace, sizeof(SEC_ACE)); new = make_sec_acl(ctx,(*the_acl)->revision,1+(*the_acl)->num_aces, aces); - free(aces); + SAFE_FREE(aces); (*the_acl) = new; return True; } @@ -391,8 +391,8 @@ static SEC_DESC *sec_desc_parse(char *str) ret = make_sec_desc(ctx,revision, owner_sid, grp_sid, NULL, dacl, &sd_size); - if (grp_sid) free(grp_sid); - if (owner_sid) free(owner_sid); + SAFE_FREE(grp_sid); + SAFE_FREE(owner_sid); return ret; } @@ -605,10 +605,8 @@ static int cacl_set(struct cli_state *cli, char *filename, } old->dacl->num_aces--; if (old->dacl->num_aces == 0) { - free(old->dacl->ace); - old->dacl->ace=NULL; - free(old->dacl); - old->dacl = NULL; + SAFE_FREE(old->dacl->ace); + SAFE_FREE(old->dacl); old->off_dacl = 0; } found = True; diff --git a/source/utils/torture.c b/source/utils/torture.c index f85a73293dd..185cd93d164 100644 --- a/source/utils/torture.c +++ b/source/utils/torture.c @@ -3646,8 +3646,8 @@ int cli_setfileinfo_test(struct cli_state *cli, int fnum, int level, char *data, return False; } - if (rdata) free(rdata); - if (rparam) free(rparam); + SAFE_FREE(rdata); + SAFE_FREE(rparam); return True; } diff --git a/source/web/cgi.c b/source/web/cgi.c index 70299f14c34..0b86265a1e5 100644 --- a/source/web/cgi.c +++ b/source/web/cgi.c @@ -168,7 +168,7 @@ void cgi_load_variables(FILE *f1) variables[num_variables].name = strdup(line); variables[num_variables].value = strdup(p+1); - free(line); + SAFE_FREE(line); if (!variables[num_variables].name || !variables[num_variables].value) diff --git a/source/web/diagnose.c b/source/web/diagnose.c index f22fe0d9b25..bf2e6da17d1 100644 --- a/source/web/diagnose.c +++ b/source/web/diagnose.c @@ -36,7 +36,7 @@ BOOL nmbd_running(void) if ((ip_list = name_query(fd, "__SAMBA__", 0, True, True, loopback_ip, &count)) != NULL) { - free(ip_list); + SAFE_FREE(ip_list); close(fd); return True; } |