summaryrefslogtreecommitdiff
path: root/source3/smbd/smbXsrv_session.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2016-03-10 08:54:54 +0100
committerJeremy Allison <jra@samba.org>2016-03-11 00:12:18 +0100
commit9341c02a8998a860d4f390bba2556555a138c71b (patch)
treed1eaaf230a6a3a6aeab54283637bdac7d55ae2f7 /source3/smbd/smbXsrv_session.c
parenta971cfe0ef47c02d119261596c0705275e17e613 (diff)
downloadsamba-9341c02a8998a860d4f390bba2556555a138c71b.tar.gz
smbd: Prevent a crash
smb2srv_session_close_previous_check crashes if ndr_pull_smbXsrv_session_globalB fails for some reason. It depends on "is_free" to be correctly set. All we can do for an invalid database is to discard the record and set it free. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Fri Mar 11 00:12:18 CET 2016 on sn-devel-144
Diffstat (limited to 'source3/smbd/smbXsrv_session.c')
-rw-r--r--source3/smbd/smbXsrv_session.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c
index a5aee8c7b24..cdad47f0e3d 100644
--- a/source3/smbd/smbXsrv_session.c
+++ b/source3/smbd/smbXsrv_session.c
@@ -833,6 +833,10 @@ static void smbXsrv_session_global_verify_record(struct db_record *db_rec,
hex_encode_talloc(frame, key.dptr, key.dsize),
nt_errstr(status)));
TALLOC_FREE(frame);
+ *is_free = true;
+ if (was_free) {
+ *was_free = true;
+ }
return;
}
@@ -848,6 +852,10 @@ static void smbXsrv_session_global_verify_record(struct db_record *db_rec,
global_blob.version));
NDR_PRINT_DEBUG(smbXsrv_session_globalB, &global_blob);
TALLOC_FREE(frame);
+ *is_free = true;
+ if (was_free) {
+ *was_free = true;
+ }
return;
}