ksmbd: handle malformed smb1 message
authorNamjae Jeon <linkinjeon@kernel.org>
Tue, 7 Nov 2023 12:04:31 +0000 (21:04 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:07:10 +0000 (17:07 +0000)
commit 5a5409d90bd05f87fe5623a749ccfbf3f7c7d400 upstream.

If set_smb1_rsp_status() is not implemented, It will cause NULL pointer
dereferece error when client send malformed smb1 message.
This patch add set_smb1_rsp_status() to ignore malformed smb1 message.

Cc: stable@vger.kernel.org
Reported-by: Robert Morris <rtm@csail.mit.edu>
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/smb/server/smb_common.c

index a4421d9458d903863cfdaa64e895db61df0b2aed..adc41b57b84c6287f25ccd219b7db8d7ea5c30bf 100644 (file)
@@ -372,11 +372,22 @@ static int smb1_allocate_rsp_buf(struct ksmbd_work *work)
        return 0;
 }
 
+/**
+ * set_smb1_rsp_status() - set error type in smb response header
+ * @work:      smb work containing smb response header
+ * @err:       error code to set in response
+ */
+static void set_smb1_rsp_status(struct ksmbd_work *work, __le32 err)
+{
+       work->send_no_response = 1;
+}
+
 static struct smb_version_ops smb1_server_ops = {
        .get_cmd_val = get_smb1_cmd_val,
        .init_rsp_hdr = init_smb1_rsp_hdr,
        .allocate_rsp_buf = smb1_allocate_rsp_buf,
        .check_user_session = smb1_check_user_session,
+       .set_rsp_status = set_smb1_rsp_status,
 };
 
 static int smb1_negotiate(struct ksmbd_work *work)