[smb3] move more common protocol header definitions to smbfs_common
authorSteve French <stfrench@microsoft.com>
Fri, 25 Mar 2022 03:09:29 +0000 (22:09 -0500)
committerSteve French <stfrench@microsoft.com>
Fri, 25 Mar 2022 15:40:56 +0000 (10:40 -0500)
We have duplicated definitions for various SMB3 PDUs in
fs/ksmbd and fs/cifs.  Some had already been moved to
fs/smbfs_common/smb2pdu.h

Move definitions for
- error response
- query info and various related protocol flags
- various lease handling flags and the create lease context

to smbfs_common/smb2pdu.h to reduce code duplication

Reviewed-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2misc.c
fs/cifs/smb2ops.c
fs/cifs/smb2pdu.h
fs/ksmbd/smb2pdu.h
fs/smbfs_common/smb2pdu.h

index 3b7c636..c653beb 100644 (file)
@@ -203,7 +203,7 @@ smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *srvr)
 
        if (smb2_rsp_struct_sizes[command] != pdu->StructureSize2) {
                if (command != SMB2_OPLOCK_BREAK_HE && (shdr->Status == 0 ||
-                   pdu->StructureSize2 != SMB2_ERROR_STRUCTURE_SIZE2)) {
+                   pdu->StructureSize2 != SMB2_ERROR_STRUCTURE_SIZE2_LE)) {
                        /* error packets have 9 byte structure size */
                        cifs_dbg(VFS, "Invalid response size %u for command %d\n",
                                 le16_to_cpu(pdu->StructureSize2), command);
@@ -303,7 +303,7 @@ smb2_get_data_area_len(int *off, int *len, struct smb2_hdr *shdr)
        /* error responses do not have data area */
        if (shdr->Status && shdr->Status != STATUS_MORE_PROCESSING_REQUIRED &&
            (((struct smb2_err_rsp *)shdr)->StructureSize) ==
-                                               SMB2_ERROR_STRUCTURE_SIZE2)
+                                               SMB2_ERROR_STRUCTURE_SIZE2_LE)
                return NULL;
 
        /*
@@ -478,11 +478,11 @@ smb2_get_lease_state(struct cifsInodeInfo *cinode)
        __le32 lease = 0;
 
        if (CIFS_CACHE_WRITE(cinode))
-               lease |= SMB2_LEASE_WRITE_CACHING;
+               lease |= SMB2_LEASE_WRITE_CACHING_LE;
        if (CIFS_CACHE_HANDLE(cinode))
-               lease |= SMB2_LEASE_HANDLE_CACHING;
+               lease |= SMB2_LEASE_HANDLE_CACHING_LE;
        if (CIFS_CACHE_READ(cinode))
-               lease |= SMB2_LEASE_READ_CACHING;
+               lease |= SMB2_LEASE_READ_CACHING_LE;
        return lease;
 }
 
index bf5d5b5..fb1d747 100644 (file)
@@ -4319,12 +4319,12 @@ static __le32
 map_oplock_to_lease(u8 oplock)
 {
        if (oplock == SMB2_OPLOCK_LEVEL_EXCLUSIVE)
-               return SMB2_LEASE_WRITE_CACHING | SMB2_LEASE_READ_CACHING;
+               return SMB2_LEASE_WRITE_CACHING_LE | SMB2_LEASE_READ_CACHING_LE;
        else if (oplock == SMB2_OPLOCK_LEVEL_II)
-               return SMB2_LEASE_READ_CACHING;
+               return SMB2_LEASE_READ_CACHING_LE;
        else if (oplock == SMB2_OPLOCK_LEVEL_BATCH)
-               return SMB2_LEASE_HANDLE_CACHING | SMB2_LEASE_READ_CACHING |
-                      SMB2_LEASE_WRITE_CACHING;
+               return SMB2_LEASE_HANDLE_CACHING_LE | SMB2_LEASE_READ_CACHING_LE |
+                      SMB2_LEASE_WRITE_CACHING_LE;
        return 0;
 }
 
@@ -4386,7 +4386,7 @@ smb2_parse_lease_buf(void *buf, unsigned int *epoch, char *lease_key)
        struct create_lease *lc = (struct create_lease *)buf;
 
        *epoch = 0; /* not used */
-       if (lc->lcontext.LeaseFlags & SMB2_LEASE_FLAG_BREAK_IN_PROGRESS)
+       if (lc->lcontext.LeaseFlags & SMB2_LEASE_FLAG_BREAK_IN_PROGRESS_LE)
                return SMB2_OPLOCK_LEVEL_NOCHANGE;
        return le32_to_cpu(lc->lcontext.LeaseState);
 }
@@ -4397,7 +4397,7 @@ smb3_parse_lease_buf(void *buf, unsigned int *epoch, char *lease_key)
        struct create_lease_v2 *lc = (struct create_lease_v2 *)buf;
 
        *epoch = le16_to_cpu(lc->lcontext.Epoch);
-       if (lc->lcontext.LeaseFlags & SMB2_LEASE_FLAG_BREAK_IN_PROGRESS)
+       if (lc->lcontext.LeaseFlags & SMB2_LEASE_FLAG_BREAK_IN_PROGRESS_LE)
                return SMB2_OPLOCK_LEVEL_NOCHANGE;
        if (lease_key)
                memcpy(lease_key, &lc->lcontext.LeaseKey, SMB2_LEASE_KEY_SIZE);
index 33cfd0a..9aa2ab8 100644 (file)
@@ -56,16 +56,6 @@ struct smb2_rdma_crypto_transform {
 
 #define COMPOUND_FID 0xFFFFFFFFFFFFFFFFULL
 
-#define SMB2_ERROR_STRUCTURE_SIZE2 cpu_to_le16(9)
-
-struct smb2_err_rsp {
-       struct smb2_hdr hdr;
-       __le16 StructureSize;
-       __le16 Reserved; /* MBZ */
-       __le32 ByteCount;  /* even if zero, at least one byte follows */
-       __u8   ErrorData[1];  /* variable length */
-} __packed;
-
 #define SYMLINK_ERROR_TAG 0x4c4d5953
 
 struct smb2_symlink_err_rsp {
@@ -139,47 +129,6 @@ struct share_redirect_error_context_rsp {
 #define SMB2_LEASE_HANDLE_CACHING_HE   0x02
 #define SMB2_LEASE_WRITE_CACHING_HE    0x04
 
-#define SMB2_LEASE_NONE                        cpu_to_le32(0x00)
-#define SMB2_LEASE_READ_CACHING                cpu_to_le32(0x01)
-#define SMB2_LEASE_HANDLE_CACHING      cpu_to_le32(0x02)
-#define SMB2_LEASE_WRITE_CACHING       cpu_to_le32(0x04)
-
-#define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS cpu_to_le32(0x00000002)
-#define SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET cpu_to_le32(0x00000004)
-
-#define SMB2_LEASE_KEY_SIZE 16
-
-struct lease_context {
-       u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
-       __le32 LeaseState;
-       __le32 LeaseFlags;
-       __le64 LeaseDuration;
-} __packed;
-
-struct lease_context_v2 {
-       u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
-       __le32 LeaseState;
-       __le32 LeaseFlags;
-       __le64 LeaseDuration;
-       __le64 ParentLeaseKeyLow;
-       __le64 ParentLeaseKeyHigh;
-       __le16 Epoch;
-       __le16 Reserved;
-} __packed;
-
-struct create_lease {
-       struct create_context ccontext;
-       __u8   Name[8];
-       struct lease_context lcontext;
-} __packed;
-
-struct create_lease_v2 {
-       struct create_context ccontext;
-       __u8   Name[8];
-       struct lease_context_v2 lcontext;
-       __u8   Pad[4];
-} __packed;
-
 struct create_durable {
        struct create_context ccontext;
        __u8   Name[8];
@@ -604,55 +553,6 @@ struct smb2_query_directory_rsp {
        __u8   Buffer[1];
 } __packed;
 
-/* Possible InfoType values */
-#define SMB2_O_INFO_FILE       0x01
-#define SMB2_O_INFO_FILESYSTEM 0x02
-#define SMB2_O_INFO_SECURITY   0x03
-#define SMB2_O_INFO_QUOTA      0x04
-
-/* Security info type additionalinfo flags. See MS-SMB2 (2.2.37) or MS-DTYP */
-#define OWNER_SECINFO   0x00000001
-#define GROUP_SECINFO   0x00000002
-#define DACL_SECINFO   0x00000004
-#define SACL_SECINFO   0x00000008
-#define LABEL_SECINFO   0x00000010
-#define ATTRIBUTE_SECINFO   0x00000020
-#define SCOPE_SECINFO   0x00000040
-#define BACKUP_SECINFO   0x00010000
-#define UNPROTECTED_SACL_SECINFO   0x10000000
-#define UNPROTECTED_DACL_SECINFO   0x20000000
-#define PROTECTED_SACL_SECINFO   0x40000000
-#define PROTECTED_DACL_SECINFO   0x80000000
-
-/* Flags used for FileFullEAinfo */
-#define SL_RESTART_SCAN                0x00000001
-#define SL_RETURN_SINGLE_ENTRY 0x00000002
-#define SL_INDEX_SPECIFIED     0x00000004
-
-struct smb2_query_info_req {
-       struct smb2_hdr hdr;
-       __le16 StructureSize; /* Must be 41 */
-       __u8   InfoType;
-       __u8   FileInfoClass;
-       __le32 OutputBufferLength;
-       __le16 InputBufferOffset;
-       __u16  Reserved;
-       __le32 InputBufferLength;
-       __le32 AdditionalInformation;
-       __le32 Flags;
-       __u64  PersistentFileId; /* opaque endianness */
-       __u64  VolatileFileId; /* opaque endianness */
-       __u8   Buffer[1];
-} __packed;
-
-struct smb2_query_info_rsp {
-       struct smb2_hdr hdr;
-       __le16 StructureSize; /* Must be 9 */
-       __le16 OutputBufferOffset;
-       __le32 OutputBufferLength;
-       __u8   Buffer[1];
-} __packed;
-
 /*
  * Maximum number of iovs we need for a set-info request.
  * The largest one is rename/hardlink
index fd3df8b..bf1f82d 100644 (file)
  *
  */
 
-#define SMB2_ERROR_STRUCTURE_SIZE2     9
-#define SMB2_ERROR_STRUCTURE_SIZE2_LE  cpu_to_le16(SMB2_ERROR_STRUCTURE_SIZE2)
-
-struct smb2_err_rsp {
-       struct smb2_hdr hdr;
-       __le16 StructureSize;
-       __u8   ErrorContextCount;
-       __u8   Reserved;
-       __le32 ByteCount;  /* even if zero, at least one byte follows */
-       __u8   ErrorData[1];  /* variable length */
-} __packed;
-
 struct preauth_integrity_info {
        /* PreAuth integrity Hash ID */
        __le16                  Preauth_HashId;
@@ -209,45 +197,6 @@ struct create_posix_rsp {
        u8 SidBuffer[40];
 } __packed;
 
-#define SMB2_LEASE_NONE_LE                     cpu_to_le32(0x00)
-#define SMB2_LEASE_READ_CACHING_LE             cpu_to_le32(0x01)
-#define SMB2_LEASE_HANDLE_CACHING_LE           cpu_to_le32(0x02)
-#define SMB2_LEASE_WRITE_CACHING_LE            cpu_to_le32(0x04)
-
-#define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS_LE   cpu_to_le32(0x02)
-
-#define SMB2_LEASE_KEY_SIZE                    16
-
-struct lease_context {
-       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
-       __le32 LeaseState;
-       __le32 LeaseFlags;
-       __le64 LeaseDuration;
-} __packed;
-
-struct lease_context_v2 {
-       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
-       __le32 LeaseState;
-       __le32 LeaseFlags;
-       __le64 LeaseDuration;
-       __u8 ParentLeaseKey[SMB2_LEASE_KEY_SIZE];
-       __le16 Epoch;
-       __le16 Reserved;
-} __packed;
-
-struct create_lease {
-       struct create_context ccontext;
-       __u8   Name[8];
-       struct lease_context lcontext;
-} __packed;
-
-struct create_lease_v2 {
-       struct create_context ccontext;
-       __u8   Name[8];
-       struct lease_context_v2 lcontext;
-       __u8   Pad[4];
-} __packed;
-
 struct smb2_buffer_desc_v1 {
        __le64 offset;
        __le32 token;
@@ -484,50 +433,6 @@ struct smb2_query_directory_rsp {
        __u8   Buffer[1];
 } __packed;
 
-/* Possible InfoType values */
-#define SMB2_O_INFO_FILE       0x01
-#define SMB2_O_INFO_FILESYSTEM 0x02
-#define SMB2_O_INFO_SECURITY   0x03
-#define SMB2_O_INFO_QUOTA      0x04
-
-/* Security info type additionalinfo flags. See MS-SMB2 (2.2.37) or MS-DTYP */
-#define OWNER_SECINFO   0x00000001
-#define GROUP_SECINFO   0x00000002
-#define DACL_SECINFO   0x00000004
-#define SACL_SECINFO   0x00000008
-#define LABEL_SECINFO   0x00000010
-#define ATTRIBUTE_SECINFO   0x00000020
-#define SCOPE_SECINFO   0x00000040
-#define BACKUP_SECINFO   0x00010000
-#define UNPROTECTED_SACL_SECINFO   0x10000000
-#define UNPROTECTED_DACL_SECINFO   0x20000000
-#define PROTECTED_SACL_SECINFO   0x40000000
-#define PROTECTED_DACL_SECINFO   0x80000000
-
-struct smb2_query_info_req {
-       struct smb2_hdr hdr;
-       __le16 StructureSize; /* Must be 41 */
-       __u8   InfoType;
-       __u8   FileInfoClass;
-       __le32 OutputBufferLength;
-       __le16 InputBufferOffset;
-       __u16  Reserved;
-       __le32 InputBufferLength;
-       __le32 AdditionalInformation;
-       __le32 Flags;
-       __u64  PersistentFileId;
-       __u64  VolatileFileId;
-       __u8   Buffer[1];
-} __packed;
-
-struct smb2_query_info_rsp {
-       struct smb2_hdr hdr;
-       __le16 StructureSize; /* Must be 9 */
-       __le16 OutputBufferOffset;
-       __le32 OutputBufferLength;
-       __u8   Buffer[1];
-} __packed;
-
 struct smb2_set_info_req {
        struct smb2_hdr hdr;
        __le16 StructureSize; /* Must be 33 */
index 6653b4b..c21ecc4 100644 (file)
@@ -115,6 +115,18 @@ struct smb2_pdu {
        __le16 StructureSize2; /* size of wct area (varies, request specific) */
 } __packed;
 
+#define SMB2_ERROR_STRUCTURE_SIZE2     9
+#define SMB2_ERROR_STRUCTURE_SIZE2_LE  cpu_to_le16(SMB2_ERROR_STRUCTURE_SIZE2)
+
+struct smb2_err_rsp {
+       struct smb2_hdr hdr;
+       __le16 StructureSize;
+       __u8   ErrorContextCount;
+       __u8   Reserved;
+       __le32 ByteCount;  /* even if zero, at least one byte follows */
+       __u8   ErrorData[1];  /* variable length */
+} __packed;
+
 #define SMB3_AES_CCM_NONCE 11
 #define SMB3_AES_GCM_NONCE 12
 
@@ -985,5 +997,94 @@ struct smb2_create_rsp {
        __u8   Buffer[1];
 } __packed;
 
+#define SMB2_LEASE_NONE_LE                     cpu_to_le32(0x00)
+#define SMB2_LEASE_READ_CACHING_LE             cpu_to_le32(0x01)
+#define SMB2_LEASE_HANDLE_CACHING_LE           cpu_to_le32(0x02)
+#define SMB2_LEASE_WRITE_CACHING_LE            cpu_to_le32(0x04)
+
+#define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS_LE   cpu_to_le32(0x02)
+
+#define SMB2_LEASE_KEY_SIZE                    16
+
+struct lease_context {
+       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
+       __le32 LeaseState;
+       __le32 LeaseFlags;
+       __le64 LeaseDuration;
+} __packed;
+
+struct lease_context_v2 {
+       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
+       __le32 LeaseState;
+       __le32 LeaseFlags;
+       __le64 LeaseDuration;
+       __u8 ParentLeaseKey[SMB2_LEASE_KEY_SIZE];
+       __le16 Epoch;
+       __le16 Reserved;
+} __packed;
+
+struct create_lease {
+       struct create_context ccontext;
+       __u8   Name[8];
+       struct lease_context lcontext;
+} __packed;
+
+struct create_lease_v2 {
+       struct create_context ccontext;
+       __u8   Name[8];
+       struct lease_context_v2 lcontext;
+       __u8   Pad[4];
+} __packed;
+
+/* Possible InfoType values */
+#define SMB2_O_INFO_FILE       0x01
+#define SMB2_O_INFO_FILESYSTEM 0x02
+#define SMB2_O_INFO_SECURITY   0x03
+#define SMB2_O_INFO_QUOTA      0x04
+
+/* SMB2 Query Info see MS-SMB2 (2.2.37) or MS-DTYP */
+
+/* Security info type additionalinfo flags. */
+#define OWNER_SECINFO   0x00000001
+#define GROUP_SECINFO   0x00000002
+#define DACL_SECINFO   0x00000004
+#define SACL_SECINFO   0x00000008
+#define LABEL_SECINFO   0x00000010
+#define ATTRIBUTE_SECINFO   0x00000020
+#define SCOPE_SECINFO   0x00000040
+#define BACKUP_SECINFO   0x00010000
+#define UNPROTECTED_SACL_SECINFO   0x10000000
+#define UNPROTECTED_DACL_SECINFO   0x20000000
+#define PROTECTED_SACL_SECINFO   0x40000000
+#define PROTECTED_DACL_SECINFO   0x80000000
+
+/* Flags used for FileFullEAinfo */
+#define SL_RESTART_SCAN                0x00000001
+#define SL_RETURN_SINGLE_ENTRY 0x00000002
+#define SL_INDEX_SPECIFIED     0x00000004
+
+struct smb2_query_info_req {
+       struct smb2_hdr hdr;
+       __le16 StructureSize; /* Must be 41 */
+       __u8   InfoType;
+       __u8   FileInfoClass;
+       __le32 OutputBufferLength;
+       __le16 InputBufferOffset;
+       __u16  Reserved;
+       __le32 InputBufferLength;
+       __le32 AdditionalInformation;
+       __le32 Flags;
+       __u64  PersistentFileId;
+       __u64  VolatileFileId;
+       __u8   Buffer[1];
+} __packed;
+
+struct smb2_query_info_rsp {
+       struct smb2_hdr hdr;
+       __le16 StructureSize; /* Must be 9 */
+       __le16 OutputBufferOffset;
+       __le32 OutputBufferLength;
+       __u8   Buffer[1];
+} __packed;
 
 #endif                         /* _COMMON_SMB2PDU_H */