diff options
author | Gerald Carter <jerry@samba.org> | 2006-01-23 14:02:17 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2006-01-23 14:02:17 +0000 |
commit | e6d82c2061d217b7ef4403a98cd7ded0d6125a2c (patch) | |
tree | bb3aef68e8f00d7c6c7ffa6b0cf07fd464067d5b /source/nmbd | |
parent | 51763121149c4c0031804f338f17b2b066f17dee (diff) | |
download | samba-e6d82c2061d217b7ef4403a98cd7ded0d6125a2c.tar.gz samba-e6d82c2061d217b7ef4403a98cd7ded0d6125a2c.tar.xz samba-e6d82c2061d217b7ef4403a98cd7ded0d6125a2c.zip |
r13081: correct fix for the segv in nmbd caused by a double free on namerec.
Diffstat (limited to 'source/nmbd')
-rw-r--r-- | source/nmbd/nmbd_namelistdb.c | 11 | ||||
-rw-r--r-- | source/nmbd/nmbd_winsserver.c | 5 |
2 files changed, 8 insertions, 8 deletions
diff --git a/source/nmbd/nmbd_namelistdb.c b/source/nmbd/nmbd_namelistdb.c index baaf5dbd548..60023a7ed5e 100644 --- a/source/nmbd/nmbd_namelistdb.c +++ b/source/nmbd/nmbd_namelistdb.c @@ -80,14 +80,13 @@ static void upcase_name( struct nmb_name *target, const struct nmb_name *source void remove_name_from_namelist(struct subnet_record *subrec, struct name_record *namerec ) { - if (subrec == wins_server_subnet) { + if (subrec == wins_server_subnet) remove_name_from_wins_namelist(namerec); - return; - } - - subrec->namelist_changed = True; + else { + subrec->namelist_changed = True; + DLIST_REMOVE(subrec->namelist, namerec); + } - DLIST_REMOVE(subrec->namelist, namerec); SAFE_FREE(namerec->data.ip); ZERO_STRUCTP(namerec); SAFE_FREE(namerec); diff --git a/source/nmbd/nmbd_winsserver.c b/source/nmbd/nmbd_winsserver.c index 5c234bf8dcc..9983efe5ebb 100644 --- a/source/nmbd/nmbd_winsserver.c +++ b/source/nmbd/nmbd_winsserver.c @@ -290,8 +290,9 @@ BOOL remove_name_from_wins_namelist(struct name_record *namerec) DLIST_REMOVE(wins_server_subnet->namelist, namerec); SAFE_FREE(namerec->data.ip); - ZERO_STRUCTP(namerec); - SAFE_FREE(namerec); + + /* namerec must be freed by the caller */ + return (ret == 0) ? True : False; } |