mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-22 22:04:47 +08:00
[smb3] move more common protocol header definitions to smbfs_common
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>
This commit is contained in:
parent
a96c94481f
commit
113be37d87
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -65,18 +65,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#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 */
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user