From 1778debff146423e3543d40c2fe8413a34888a27 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 30 Aug 1998 04:27:26 +0000 Subject: added some defensive programming to nmbd. This mostly means zeroing areas of memory before freeing them. While doing this I also found a couple of real bugs. In two places we were freeing some memory that came from the stack, which leads to a certain core dump on many sytems. (This used to be commit c5e5c25c854e54f59291057ba47c4701b5910ebe) --- source3/nmbd/nmbd_become_lmb.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'source3/nmbd/nmbd_become_lmb.c') diff --git a/source3/nmbd/nmbd_become_lmb.c b/source3/nmbd/nmbd_become_lmb.c index 2d007ecd75..3fe6f596fa 100644 --- a/source3/nmbd/nmbd_become_lmb.c +++ b/source3/nmbd/nmbd_become_lmb.c @@ -212,9 +212,9 @@ static void release_1d_name( struct subnet_record *subrec, char *workgroup_name, if((namerec = find_name_on_subnet( subrec, &nmbname, FIND_SELF_NAME))!=NULL) { struct userdata_struct *userdata; + int size = sizeof(struct userdata_struct) + sizeof(BOOL); - if((userdata = (struct userdata_struct *)malloc( - sizeof(struct userdata_struct) + sizeof(BOOL))) == NULL) + if((userdata = (struct userdata_struct *)malloc(size)) == NULL) { DEBUG(0,("release_1d_name: malloc fail.\n")); return; @@ -230,7 +230,7 @@ static void release_1d_name( struct subnet_record *subrec, char *workgroup_name, unbecome_local_master_fail, userdata); - free((char *)userdata); + zero_free(userdata, size); } } @@ -526,6 +526,7 @@ void become_local_master_browser(struct subnet_record *subrec, struct work_recor { struct server_record *servrec; struct userdata_struct *userdata; + int size = sizeof(struct userdata_struct) + sizeof(fstring) + 1; /* Sanity check. */ if (!lp_local_master()) @@ -561,7 +562,7 @@ in workgroup %s on subnet %s\n", subrec->work_changed = True; /* Setup the userdata_struct. */ - if((userdata = (struct userdata_struct *)malloc(sizeof(struct userdata_struct) + sizeof(fstring)+1)) == NULL) + if((userdata = (struct userdata_struct *)malloc(size)) == NULL) { DEBUG(0,("become_local_master_browser: malloc fail.\n")); return; @@ -578,7 +579,7 @@ in workgroup %s on subnet %s\n", become_local_master_fail1, userdata); - free((char *)userdata); + zero_free(userdata, size); } /*************************************************************** -- cgit