ksmbd: Fix ZDI-CAN-18259
[openwrt/openwrt.git] / package / kernel / ksmbd / patches / 10-ksmbd-check-nt_len-to-be-at-least-CIFS_ENCPWD_SIZE-i.patch
1 From 8824b7af409f51f1316e92e9887c2fd48c0b26d6 Mon Sep 17 00:00:00 2001
2 From: William Liu <will@willsroot.io>
3 Date: Fri, 30 Dec 2022 09:13:35 +0900
4 Subject: ksmbd: check nt_len to be at least CIFS_ENCPWD_SIZE in
5 ksmbd_decode_ntlmssp_auth_blob
6 MIME-Version: 1.0
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
9
10 "nt_len - CIFS_ENCPWD_SIZE" is passed directly from
11 ksmbd_decode_ntlmssp_auth_blob to ksmbd_auth_ntlmv2. Malicious requests
12 can set nt_len to less than CIFS_ENCPWD_SIZE, which results in a negative
13 number (or large unsigned value) used for a subsequent memcpy in
14 ksmbd_auth_ntlvm2 and can cause a panic.
15
16 Fixes: e2f3448 ("cifsd: add server-side procedures for SMB3")
17 Cc: stable@vger.kernel.org
18 Signed-off-by: William Liu <will@willsroot.io>
19 Signed-off-by: Hrvoje Mišetić <misetichrvoje@gmail.com>
20 Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
21 ---
22 auth.c | 3 ++-
23 1 file changed, 2 insertions(+), 1 deletion(-)
24
25 --- a/auth.c
26 +++ b/auth.c
27 @@ -583,7 +583,8 @@ int ksmbd_decode_ntlmssp_auth_blob(struc
28 dn_off = le32_to_cpu(authblob->DomainName.BufferOffset);
29 dn_len = le16_to_cpu(authblob->DomainName.Length);
30
31 - if (blob_len < (u64)dn_off + dn_len || blob_len < (u64)nt_off + nt_len)
32 + if (blob_len < (u64)dn_off + dn_len || blob_len < (u64)nt_off + nt_len ||
33 + nt_len < CIFS_ENCPWD_SIZE)
34 return -EINVAL;
35
36 #ifdef CONFIG_SMB_INSECURE_SERVER