summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2021-08-11 13:58:13 -0700
committerJule Anger <janger@samba.org>2021-08-17 09:07:18 +0000
commit618fd6c259458f97530fcde0fb6600e70e6f2478 (patch)
treec8e50d963bde6a20af1146cd589242fa91e8636a
parent3d912fe86cfdb9f6d45645bf0122a814f79cb3a7 (diff)
downloadsamba-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.c15
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);