s3: smbd: Fix a read after free if a chained SMB1 call goes async.
authorJeremy Allison <jra@samba.org>
Thu, 13 Jul 2017 19:06:58 +0000 (12:06 -0700)
committerJeremy Allison <jra@samba.org>
Sat, 15 Jul 2017 00:16:18 +0000 (02:16 +0200)
Reported to the Samba Team by Yihan Lian <lianyihan@360.cn>, a security
researcher of Qihoo 360 GearTeam. Thanks a lot!

smb1_parse_chain() incorrectly used talloc_tos() for the memory
context of the chained smb1 requests. This gets freed between
requests so if a chained request goes async, the saved request
array also is freed, which causes a crash on resume.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12836

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/smbd/process.c

index a19b8b78b9b71646426c51ebe29ae858618e9729..3765739d9c4eaeb35d7b9c3bd9b3c4ebc86eb192 100644 (file)
@@ -1785,7 +1785,7 @@ static void construct_reply_chain(struct smbXsrv_connection *xconn,
        unsigned num_reqs;
        bool ok;
 
-       ok = smb1_parse_chain(talloc_tos(), (uint8_t *)inbuf, xconn, encrypted,
+       ok = smb1_parse_chain(xconn, (uint8_t *)inbuf, xconn, encrypted,
                              seqnum, &reqs, &num_reqs);
        if (!ok) {
                char errbuf[smb_size];