diff options
author | Jeremy Allison <jra@samba.org> | 2010-06-02 16:43:31 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2010-06-02 16:43:31 -0700 |
commit | 53e465062249bc91e53eb8d5fa54034933a650af (patch) | |
tree | e7c38eb3727ece4560d2f637e5cd2ced697b1d69 /source3/smbd/oplock_linux.c | |
parent | bcd4077be64e49b11a819cdcf27939a0fcc0d9bd (diff) | |
download | samba-53e465062249bc91e53eb8d5fa54034933a650af.tar.gz samba-53e465062249bc91e53eb8d5fa54034933a650af.tar.bz2 samba-53e465062249bc91e53eb8d5fa54034933a650af.zip |
Fix a crash bug found by Ira Cooper <samba@ira.wakeful.net>.
A create call comes in, goes async (on the oplock request).
At a later time (just before a cancel request is received)
it completes, and goes through smbd_smb2_request_reply() to
send the reply to the create call.
However, the output socket queue is full, so when
tstream_writev_queue_send() is called from smbd_smb2_request_reply(),
the smb2req stays on the "being processed" queue on
sconn->smb2.requests, as only when tstream_writev_queue_send() completes
is smbd_smb2_request_writev_done() get called, which will TALLOC_FREE
the smb2req (and thus take if off the queue).
The cancel comes in, gets processed and looks through the
requests on the queue, and BANG - hits the smb2req that
has already been processed and is outgoing....
Remove the request from the queue once
tstream_writev_queue_send() is called and not in the talloc
destructor function.
Jeremy.
Diffstat (limited to 'source3/smbd/oplock_linux.c')
0 files changed, 0 insertions, 0 deletions