Commit 74112860 authored by Pavel Shilovsky's avatar Pavel Shilovsky Committed by Steve French

CIFS: Fix log messages in packet checking for SMB2

Signed-off-by: default avatarPavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
parent b7ca6928
...@@ -52,7 +52,8 @@ check_smb2_hdr(struct smb2_hdr *hdr, __u64 mid) ...@@ -52,7 +52,8 @@ check_smb2_hdr(struct smb2_hdr *hdr, __u64 mid)
cERROR(1, "Bad protocol string signature header %x", cERROR(1, "Bad protocol string signature header %x",
*(unsigned int *) hdr->ProtocolId); *(unsigned int *) hdr->ProtocolId);
if (mid != hdr->MessageId) if (mid != hdr->MessageId)
cERROR(1, "Mids do not match"); cERROR(1, "Mids do not match: %llu and %llu", mid,
hdr->MessageId);
} }
cERROR(1, "Bad SMB detected. The Mid=%llu", hdr->MessageId); cERROR(1, "Bad SMB detected. The Mid=%llu", hdr->MessageId);
return 1; return 1;
...@@ -107,7 +108,7 @@ smb2_check_message(char *buf, unsigned int length) ...@@ -107,7 +108,7 @@ smb2_check_message(char *buf, unsigned int length)
* ie Validate the wct via smb2_struct_sizes table above * ie Validate the wct via smb2_struct_sizes table above
*/ */
if (length < 2 + sizeof(struct smb2_hdr)) { if (length < sizeof(struct smb2_pdu)) {
if ((length >= sizeof(struct smb2_hdr)) && (hdr->Status != 0)) { if ((length >= sizeof(struct smb2_hdr)) && (hdr->Status != 0)) {
pdu->StructureSize2 = 0; pdu->StructureSize2 = 0;
/* /*
...@@ -121,15 +122,15 @@ smb2_check_message(char *buf, unsigned int length) ...@@ -121,15 +122,15 @@ smb2_check_message(char *buf, unsigned int length)
return 1; return 1;
} }
if (len > CIFSMaxBufSize + MAX_SMB2_HDR_SIZE - 4) { if (len > CIFSMaxBufSize + MAX_SMB2_HDR_SIZE - 4) {
cERROR(1, "SMB length greater than maximum, mid=%lld", mid); cERROR(1, "SMB length greater than maximum, mid=%llu", mid);
return 1; return 1;
} }
if (check_smb2_hdr(hdr, mid)) if (check_smb2_hdr(hdr, mid))
return 1; return 1;
if (hdr->StructureSize != SMB2_HEADER_SIZE) { if (hdr->StructureSize != SMB2_HEADER_STRUCTURE_SIZE) {
cERROR(1, "Illegal structure size %d", cERROR(1, "Illegal structure size %u",
le16_to_cpu(hdr->StructureSize)); le16_to_cpu(hdr->StructureSize));
return 1; return 1;
} }
...@@ -161,8 +162,9 @@ smb2_check_message(char *buf, unsigned int length) ...@@ -161,8 +162,9 @@ smb2_check_message(char *buf, unsigned int length)
if (4 + len != clc_len) { if (4 + len != clc_len) {
cFYI(1, "Calculated size %u length %u mismatch mid %llu", cFYI(1, "Calculated size %u length %u mismatch mid %llu",
clc_len, 4 + len, mid); clc_len, 4 + len, mid);
if (clc_len == 4 + len + 1) /* BB FIXME (fix samba) */ /* server can return one byte more */
return 0; /* BB workaround Samba 3 bug SessSetup rsp */ if (clc_len == 4 + len + 1)
return 0;
return 1; return 1;
} }
return 0; return 0;
......
...@@ -87,10 +87,6 @@ ...@@ -87,10 +87,6 @@
#define SMB2_PROTO_NUMBER __constant_cpu_to_le32(0x424d53fe) #define SMB2_PROTO_NUMBER __constant_cpu_to_le32(0x424d53fe)
#define SMB2_HEADER_SIZE __constant_le16_to_cpu(64)
#define SMB2_ERROR_STRUCTURE_SIZE2 __constant_le16_to_cpu(9)
/* /*
* SMB2 Header Definition * SMB2 Header Definition
* *
...@@ -99,6 +95,9 @@ ...@@ -99,6 +95,9 @@
* "PDU" : "Protocol Data Unit" (ie a network "frame") * "PDU" : "Protocol Data Unit" (ie a network "frame")
* *
*/ */
#define SMB2_HEADER_STRUCTURE_SIZE __constant_le16_to_cpu(64)
struct smb2_hdr { struct smb2_hdr {
__be32 smb2_buf_length; /* big endian on wire */ __be32 smb2_buf_length; /* big endian on wire */
/* length is only two or three bytes - with /* length is only two or three bytes - with
...@@ -140,6 +139,9 @@ struct smb2_pdu { ...@@ -140,6 +139,9 @@ struct smb2_pdu {
* command code name for the struct. Note that structures must be packed. * command code name for the struct. Note that structures must be packed.
* *
*/ */
#define SMB2_ERROR_STRUCTURE_SIZE2 __constant_le16_to_cpu(9)
struct smb2_err_rsp { struct smb2_err_rsp {
struct smb2_hdr hdr; struct smb2_hdr hdr;
__le16 StructureSize; __le16 StructureSize;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment