From d46846044fe48208d65f94193bcf533c32b8c90c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Aug 2021 13:58:13 -0700 Subject: [PATCH] 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 Reviewed-by: Ralph Boehme --- source3/smbd/smb2_ioctl.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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); -- 2.30.2