diff options
author | Jeremy Allison <jra@samba.org> | 2021-08-11 13:58:13 -0700 |
---|---|---|
committer | Jule Anger <janger@samba.org> | 2021-08-17 09:07:18 +0000 |
commit | 618fd6c259458f97530fcde0fb6600e70e6f2478 (patch) | |
tree | c8e50d963bde6a20af1146cd589242fa91e8636a | |
parent | 3d912fe86cfdb9f6d45645bf0122a814f79cb3a7 (diff) | |
download | samba-618fd6c259458f97530fcde0fb6600e70e6f2478.tar.gz |
s3: smbd: For FSCTL calls that go async, add the outstanding tevent_reqs to the aio list on the file handle.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14769
RN: smbd panic on force-close share during offload write
Back-ported from c013509680742ff45b2f5965a5564015da7d466b.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(v4-14-test): Jule Anger <janger@samba.org>
Autobuild-Date(v4-14-test): Tue Aug 17 09:07:18 UTC 2021 on sn-devel-184
-rw-r--r-- | source3/smbd/smb2_ioctl.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/source3/smbd/smb2_ioctl.c b/source3/smbd/smb2_ioctl.c index d29ff5d0303..3d65a96368c 100644 --- a/source3/smbd/smb2_ioctl.c +++ b/source3/smbd/smb2_ioctl.c @@ -230,6 +230,21 @@ NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req) if (subreq == NULL) { return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY); } + + /* + * If the FSCTL has gone async on a file handle, remember + * to add it to the list of async requests we need to wait + * for on file handle close. + */ + if (in_fsp != NULL && tevent_req_is_in_progress(subreq)) { + bool ok; + + ok = aio_add_req_to_fsp(in_fsp, subreq); + if (!ok) { + return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY); + } + } + tevent_req_set_callback(subreq, smbd_smb2_request_ioctl_done, req); return smbd_smb2_request_pending_queue(req, subreq, 1000); |