summaryrefslogtreecommitdiff
path: root/fs/smb/common
diff options
context:
space:
mode:
authorSteve French <stfrench@microsoft.com>2023-08-25 07:29:18 +0300
committerSteve French <stfrench@microsoft.com>2023-08-25 07:37:06 +0300
commit09ee7a3bf866c0fa5ee1914d2c65958559eb5b4c (patch)
tree28032714614a3bbbe83a8b948d5def6164ad81cd /fs/smb/common
parentb6d44d42313baa45a81ce9b299aeee2ccf3d0ee1 (diff)
downloadlinux-09ee7a3bf866c0fa5ee1914d2c65958559eb5b4c.tar.xz
[SMB3] send channel sequence number in SMB3 requests after reconnects
The ChannelSequence field in the SMB3 header is supposed to be increased after reconnect to allow the server to distinguish requests from before and after the reconnect. We had always been setting it to zero. There are cases where incrementing ChannelSequence on requests after network reconnects can reduce the chance of data corruptions. See MS-SMB2 3.2.4.1 and 3.2.7.1 Signed-off-by: Steve French <stfrench@microsoft.com> Cc: stable@vger.kernel.org # 5.16+
Diffstat (limited to 'fs/smb/common')
-rw-r--r--fs/smb/common/smb2pdu.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h
index bae590eec871..2680251b9aac 100644
--- a/fs/smb/common/smb2pdu.h
+++ b/fs/smb/common/smb2pdu.h
@@ -153,6 +153,28 @@ struct smb2_hdr {
__u8 Signature[16];
} __packed;
+struct smb3_hdr_req {
+ __le32 ProtocolId; /* 0xFE 'S' 'M' 'B' */
+ __le16 StructureSize; /* 64 */
+ __le16 CreditCharge; /* MBZ */
+ __le16 ChannelSequence; /* See MS-SMB2 3.2.4.1 and 3.2.7.1 */
+ __le16 Reserved;
+ __le16 Command;
+ __le16 CreditRequest; /* CreditResponse */
+ __le32 Flags;
+ __le32 NextCommand;
+ __le64 MessageId;
+ union {
+ struct {
+ __le32 ProcessId;
+ __le32 TreeId;
+ } __packed SyncId;
+ __le64 AsyncId;
+ } __packed Id;
+ __le64 SessionId;
+ __u8 Signature[16];
+} __packed;
+
struct smb2_pdu {
struct smb2_hdr hdr;
__le16 StructureSize2; /* size of wct area (varies, request specific) */