]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: move setting SMB2_FLAGS_ASYNC_COMMAND and AsyncId
authorNamjae Jeon <linkinjeon@kernel.org>
Mon, 18 Dec 2023 15:34:53 +0000 (00:34 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Dec 2023 09:42:00 +0000 (10:42 +0100)
[ Upstream commit 9ac45ac7cf65b0623ceeab9b28b307a08efa22dc ]

Directly set SMB2_FLAGS_ASYNC_COMMAND flags and AsyncId in smb2 header of
interim response instead of current response header.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ksmbd/smb2pdu.c

index 7fba0d14474c92041a3ad68cd10fa02b3c59752f..fd174b469bcbd9c99b7c75b367786891ff42b4f9 100644 (file)
@@ -658,13 +658,9 @@ smb2_get_name(const char *src, const int maxlen, struct nls_table *local_nls)
 
 int setup_async_work(struct ksmbd_work *work, void (*fn)(void **), void **arg)
 {
-       struct smb2_hdr *rsp_hdr;
        struct ksmbd_conn *conn = work->conn;
        int id;
 
-       rsp_hdr = ksmbd_resp_buf_next(work);
-       rsp_hdr->Flags |= SMB2_FLAGS_ASYNC_COMMAND;
-
        id = ksmbd_acquire_async_msg_id(&conn->async_ida);
        if (id < 0) {
                pr_err("Failed to alloc async message id\n");
@@ -672,7 +668,6 @@ int setup_async_work(struct ksmbd_work *work, void (*fn)(void **), void **arg)
        }
        work->asynchronous = true;
        work->async_id = id;
-       rsp_hdr->Id.AsyncId = cpu_to_le64(id);
 
        ksmbd_debug(SMB,
                    "Send interim Response to inform async request id : %d\n",
@@ -724,6 +719,8 @@ void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status)
               __SMB2_HEADER_STRUCTURE_SIZE);
 
        rsp_hdr = smb2_get_msg(in_work->response_buf);
+       rsp_hdr->Flags |= SMB2_FLAGS_ASYNC_COMMAND;
+       rsp_hdr->Id.AsyncId = cpu_to_le64(work->async_id);
        smb2_set_err_rsp(in_work);
        rsp_hdr->Status = status;