mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 03:50:24 +09:00
smb3: add indatalen that can be a non-zero value to calculation of credit charge in smb2 ioctl
commitebf57440ecupstream. Some of tests in xfstests failed with cifsd kernel server since commite80ddeb2f7. cifsd kernel server validates credit charge from client by calculating it base on max((InputCount + OutputCount) and (MaxInputResponse + MaxOutputResponse)) according to specification. MS-SMB2 specification describe credit charge calculation of smb2 ioctl : If Connection.SupportsMultiCredit is TRUE, the server MUST validate CreditCharge based on the maximum of (InputCount + OutputCount) and (MaxInputResponse + MaxOutputResponse), as specified in section 3.3.5.2.5. If the validation fails, it MUST fail the IOCTL request with STATUS_INVALID_PARAMETER. This patch add indatalen that can be a non-zero value to calculation of credit charge in SMB2_ioctl_init(). Fixes:e80ddeb2f7("smb3: fix incorrect number of credits when ioctl MaxOutputResponse > 64K") Cc: Stable <stable@vger.kernel.org> Reviewed-by: Aurelien Aptel <aaptel@suse.com> Cc: Steve French <smfrench@gmail.com> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0470d6c327
commit
3003daa76b
@@ -2747,7 +2747,9 @@ SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,
|
||||
* response size smaller.
|
||||
*/
|
||||
req->MaxOutputResponse = cpu_to_le32(max_response_size);
|
||||
req->sync_hdr.CreditCharge = cpu_to_le16(DIV_ROUND_UP(max_response_size, SMB2_MAX_BUFFER_SIZE));
|
||||
req->sync_hdr.CreditCharge =
|
||||
cpu_to_le16(DIV_ROUND_UP(max(indatalen, max_response_size),
|
||||
SMB2_MAX_BUFFER_SIZE));
|
||||
if (is_fsctl)
|
||||
req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user