Commit a5a25a11 authored by Marios Makassikis's avatar Marios Makassikis Committed by Namjae Jeon
Browse files

ksmbd: Relax credit_charge check in smb2_validate_credit_charge()



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: default avatarMarios Makassikis <mmakassikis@freebox.fr>
Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent e294f78d
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -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;
	}