ksmbd: Relax credit_charge check in smb2_validate_credit_charge()
authorMarios Makassikis <mmakassikis@freebox.fr>
Sat, 26 Jun 2021 13:56:48 +0000 (22:56 +0900)
committerNamjae Jeon <namjae.jeon@samsung.com>
Tue, 29 Jun 2021 06:06:23 +0000 (15:06 +0900)
smb2_validate_credit_charge() checks the CreditCharge field in the
request is valid with regards to the payload size.

The current implementation rejects requests with CreditCharge = 0 and a
payload < 64K, even though they should be accepted.

Set CreditCharge to a minimum value of 1 to avoid rejecting such
requests. This matches what samba4 does.

Fixes share enumeration for jcifs-ng clients.

Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/ksmbd/smb2misc.c

index 730d680..4508631 100644 (file)
@@ -317,14 +317,12 @@ static int smb2_validate_credit_charge(struct smb2_hdr *hdr)
                return 0;
        }
 
+       credit_charge = max(1, credit_charge);
        max_len = max(req_len, expect_resp_len);
        calc_credit_num = DIV_ROUND_UP(max_len, SMB2_MAX_BUFFER_SIZE);
-       if (!credit_charge && max_len > SMB2_MAX_BUFFER_SIZE) {
-               pr_err("credit charge is zero and payload size(%d) is bigger than 64K\n",
-                      max_len);
-               return 1;
-       } else if (credit_charge < calc_credit_num) {
-               pr_err("credit charge : %d, calc_credit_num : %d\n",
+
+       if (credit_charge < calc_credit_num) {
+               pr_err("Insufficient credit charge, given: %d, needed: %d\n",
                       credit_charge, calc_credit_num);
                return 1;
        }