diff mbox series

ksmbd: validate the zero field of packet header

Message ID 20231208065647.745640-1-linan666@huaweicloud.com (mailing list archive)
State New, archived
Headers show
Series ksmbd: validate the zero field of packet header | expand

Commit Message

Li Nan Dec. 8, 2023, 6:56 a.m. UTC
From: Li Nan <linan122@huawei.com>

The SMB2 Protocol requires that "The first byte of the Direct TCP
transport packet header MUST be zero (0x00)"[1]. Commit 1c1bcf2d3ea0
("ksmbd: validate smb request protocol id") removed the validation of
this 1-byte zero. Add the validation back now.

[1]: [MS-SMB2] - v20230227, page 30.
https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-SMB2/%5bMS-SMB2%5d-230227.pdf

Fixes: 1c1bcf2d3ea0 ("ksmbd: validate smb request protocol id")
Signed-off-by: Li Nan <linan122@huawei.com>
---
 fs/smb/server/smb_common.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Namjae Jeon Dec. 8, 2023, 2:20 p.m. UTC | #1
2023-12-08 15:56 GMT+09:00, linan666@huaweicloud.com <linan666@huaweicloud.com>:
> From: Li Nan <linan122@huawei.com>
>
> The SMB2 Protocol requires that "The first byte of the Direct TCP
> transport packet header MUST be zero (0x00)"[1]. Commit 1c1bcf2d3ea0
> ("ksmbd: validate smb request protocol id") removed the validation of
> this 1-byte zero. Add the validation back now.
>
> [1]: [MS-SMB2] - v20230227, page 30.
> https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-SMB2/%5bMS-SMB2%5d-230227.pdf
>
> Fixes: 1c1bcf2d3ea0 ("ksmbd: validate smb request protocol id")
> Signed-off-by: Li Nan <linan122@huawei.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Applied it to #ksmbd-for-next-next.
Thanks for your patch!
Tom Talpey Dec. 8, 2023, 3:34 p.m. UTC | #2
On 12/8/2023 9:20 AM, Namjae Jeon wrote:
> 2023-12-08 15:56 GMT+09:00, linan666@huaweicloud.com <linan666@huaweicloud.com>:
>> From: Li Nan <linan122@huawei.com>
>>
>> The SMB2 Protocol requires that "The first byte of the Direct TCP
>> transport packet header MUST be zero (0x00)"[1]. Commit 1c1bcf2d3ea0
>> ("ksmbd: validate smb request protocol id") removed the validation of
>> this 1-byte zero. Add the validation back now.
>>
>> [1]: [MS-SMB2] - v20230227, page 30.
>> https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-SMB2/%5bMS-SMB2%5d-230227.pdf
>>
>> Fixes: 1c1bcf2d3ea0 ("ksmbd: validate smb request protocol id")
>> Signed-off-by: Li Nan <linan122@huawei.com>
> Acked-by: Namjae Jeon <linkinjeon@kernel.org>
> Applied it to #ksmbd-for-next-next.
> Thanks for your patch!
> 
> 

Technically speaking, the first byte of the 4-byte header is a flag
used for multi-segment continuation/reassembly. But since ksmbd does
not have any code to do such processing, it's best to deny the
message. So...

Acked-by: Tom Talpey <tom@talpey.com>
diff mbox series

Patch

diff --git a/fs/smb/server/smb_common.c b/fs/smb/server/smb_common.c
index 6691ae68af0c..7c98bf699772 100644
--- a/fs/smb/server/smb_common.c
+++ b/fs/smb/server/smb_common.c
@@ -158,8 +158,12 @@  int ksmbd_verify_smb_message(struct ksmbd_work *work)
  */
 bool ksmbd_smb_request(struct ksmbd_conn *conn)
 {
-	__le32 *proto = (__le32 *)smb2_get_msg(conn->request_buf);
+	__le32 *proto;
 
+	if (conn->request_buf[0] != 0)
+		return false;
+
+	proto = (__le32 *)smb2_get_msg(conn->request_buf);
 	if (*proto == SMB2_COMPRESSION_TRANSFORM_ID) {
 		pr_err_ratelimited("smb2 compression not support yet");
 		return false;