|
@@ -1412,7 +1412,7 @@ smb2_get_dfs_refer(const unsigned int xid, struct cifs_ses *ses,
|
|
} while (rc == -EAGAIN);
|
|
} while (rc == -EAGAIN);
|
|
|
|
|
|
if (rc) {
|
|
if (rc) {
|
|
- if (rc != -ENOENT)
|
|
|
|
|
|
+ if ((rc != -ENOENT) && (rc != -EOPNOTSUPP))
|
|
cifs_dbg(VFS, "ioctl error in smb2_get_dfs_refer rc=%d\n", rc);
|
|
cifs_dbg(VFS, "ioctl error in smb2_get_dfs_refer rc=%d\n", rc);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
@@ -1457,6 +1457,8 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
|
|
unsigned int sub_offset;
|
|
unsigned int sub_offset;
|
|
unsigned int print_len;
|
|
unsigned int print_len;
|
|
unsigned int print_offset;
|
|
unsigned int print_offset;
|
|
|
|
+ struct cifs_ses *ses = tcon->ses;
|
|
|
|
+ struct TCP_Server_Info *server = ses->server;
|
|
|
|
|
|
cifs_dbg(FYI, "%s: path: %s\n", __func__, full_path);
|
|
cifs_dbg(FYI, "%s: path: %s\n", __func__, full_path);
|
|
|
|
|
|
@@ -1479,7 +1481,7 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
|
|
}
|
|
}
|
|
|
|
|
|
if (le32_to_cpu(err_buf->ByteCount) < sizeof(struct smb2_symlink_err_rsp) ||
|
|
if (le32_to_cpu(err_buf->ByteCount) < sizeof(struct smb2_symlink_err_rsp) ||
|
|
- get_rfc1002_length(err_buf) + 4 < SMB2_SYMLINK_STRUCT_SIZE) {
|
|
|
|
|
|
+ get_rfc1002_length(err_buf) + server->vals->header_preamble_size < SMB2_SYMLINK_STRUCT_SIZE) {
|
|
kfree(utf16_path);
|
|
kfree(utf16_path);
|
|
return -ENOENT;
|
|
return -ENOENT;
|
|
}
|
|
}
|
|
@@ -1492,13 +1494,13 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
|
|
print_len = le16_to_cpu(symlink->PrintNameLength);
|
|
print_len = le16_to_cpu(symlink->PrintNameLength);
|
|
print_offset = le16_to_cpu(symlink->PrintNameOffset);
|
|
print_offset = le16_to_cpu(symlink->PrintNameOffset);
|
|
|
|
|
|
- if (get_rfc1002_length(err_buf) + 4 <
|
|
|
|
|
|
+ if (get_rfc1002_length(err_buf) + server->vals->header_preamble_size <
|
|
SMB2_SYMLINK_STRUCT_SIZE + sub_offset + sub_len) {
|
|
SMB2_SYMLINK_STRUCT_SIZE + sub_offset + sub_len) {
|
|
kfree(utf16_path);
|
|
kfree(utf16_path);
|
|
return -ENOENT;
|
|
return -ENOENT;
|
|
}
|
|
}
|
|
|
|
|
|
- if (get_rfc1002_length(err_buf) + 4 <
|
|
|
|
|
|
+ if (get_rfc1002_length(err_buf) + server->vals->header_preamble_size <
|
|
SMB2_SYMLINK_STRUCT_SIZE + print_offset + print_len) {
|
|
SMB2_SYMLINK_STRUCT_SIZE + print_offset + print_len) {
|
|
kfree(utf16_path);
|
|
kfree(utf16_path);
|
|
return -ENOENT;
|
|
return -ENOENT;
|
|
@@ -2050,7 +2052,8 @@ smb2_dir_needs_close(struct cifsFileInfo *cfile)
|
|
}
|
|
}
|
|
|
|
|
|
static void
|
|
static void
|
|
-fill_transform_hdr(struct smb2_transform_hdr *tr_hdr, struct smb_rqst *old_rq)
|
|
|
|
|
|
+fill_transform_hdr(struct TCP_Server_Info *server,
|
|
|
|
+ struct smb2_transform_hdr *tr_hdr, struct smb_rqst *old_rq)
|
|
{
|
|
{
|
|
struct smb2_sync_hdr *shdr =
|
|
struct smb2_sync_hdr *shdr =
|
|
(struct smb2_sync_hdr *)old_rq->rq_iov[1].iov_base;
|
|
(struct smb2_sync_hdr *)old_rq->rq_iov[1].iov_base;
|
|
@@ -2062,10 +2065,19 @@ fill_transform_hdr(struct smb2_transform_hdr *tr_hdr, struct smb_rqst *old_rq)
|
|
tr_hdr->Flags = cpu_to_le16(0x01);
|
|
tr_hdr->Flags = cpu_to_le16(0x01);
|
|
get_random_bytes(&tr_hdr->Nonce, SMB3_AES128CMM_NONCE);
|
|
get_random_bytes(&tr_hdr->Nonce, SMB3_AES128CMM_NONCE);
|
|
memcpy(&tr_hdr->SessionId, &shdr->SessionId, 8);
|
|
memcpy(&tr_hdr->SessionId, &shdr->SessionId, 8);
|
|
- inc_rfc1001_len(tr_hdr, sizeof(struct smb2_transform_hdr) - 4);
|
|
|
|
|
|
+ inc_rfc1001_len(tr_hdr, sizeof(struct smb2_transform_hdr) - server->vals->header_preamble_size);
|
|
inc_rfc1001_len(tr_hdr, orig_len);
|
|
inc_rfc1001_len(tr_hdr, orig_len);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* We can not use the normal sg_set_buf() as we will sometimes pass a
|
|
|
|
+ * stack object as buf.
|
|
|
|
+ */
|
|
|
|
+static inline void smb2_sg_set_buf(struct scatterlist *sg, const void *buf,
|
|
|
|
+ unsigned int buflen)
|
|
|
|
+{
|
|
|
|
+ sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));
|
|
|
|
+}
|
|
|
|
+
|
|
static struct scatterlist *
|
|
static struct scatterlist *
|
|
init_sg(struct smb_rqst *rqst, u8 *sign)
|
|
init_sg(struct smb_rqst *rqst, u8 *sign)
|
|
{
|
|
{
|
|
@@ -2080,16 +2092,16 @@ init_sg(struct smb_rqst *rqst, u8 *sign)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
sg_init_table(sg, sg_len);
|
|
sg_init_table(sg, sg_len);
|
|
- sg_set_buf(&sg[0], rqst->rq_iov[0].iov_base + 24, assoc_data_len);
|
|
|
|
|
|
+ smb2_sg_set_buf(&sg[0], rqst->rq_iov[0].iov_base + 24, assoc_data_len);
|
|
for (i = 1; i < rqst->rq_nvec; i++)
|
|
for (i = 1; i < rqst->rq_nvec; i++)
|
|
- sg_set_buf(&sg[i], rqst->rq_iov[i].iov_base,
|
|
|
|
|
|
+ smb2_sg_set_buf(&sg[i], rqst->rq_iov[i].iov_base,
|
|
rqst->rq_iov[i].iov_len);
|
|
rqst->rq_iov[i].iov_len);
|
|
for (j = 0; i < sg_len - 1; i++, j++) {
|
|
for (j = 0; i < sg_len - 1; i++, j++) {
|
|
unsigned int len = (j < rqst->rq_npages - 1) ? rqst->rq_pagesz
|
|
unsigned int len = (j < rqst->rq_npages - 1) ? rqst->rq_pagesz
|
|
: rqst->rq_tailsz;
|
|
: rqst->rq_tailsz;
|
|
sg_set_page(&sg[i], rqst->rq_pages[j], len, 0);
|
|
sg_set_page(&sg[i], rqst->rq_pages[j], len, 0);
|
|
}
|
|
}
|
|
- sg_set_buf(&sg[sg_len - 1], sign, SMB2_SIGNATURE_SIZE);
|
|
|
|
|
|
+ smb2_sg_set_buf(&sg[sg_len - 1], sign, SMB2_SIGNATURE_SIZE);
|
|
return sg;
|
|
return sg;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2125,7 +2137,7 @@ crypt_message(struct TCP_Server_Info *server, struct smb_rqst *rqst, int enc)
|
|
{
|
|
{
|
|
struct smb2_transform_hdr *tr_hdr =
|
|
struct smb2_transform_hdr *tr_hdr =
|
|
(struct smb2_transform_hdr *)rqst->rq_iov[0].iov_base;
|
|
(struct smb2_transform_hdr *)rqst->rq_iov[0].iov_base;
|
|
- unsigned int assoc_data_len = sizeof(struct smb2_transform_hdr) - 24;
|
|
|
|
|
|
+ unsigned int assoc_data_len = sizeof(struct smb2_transform_hdr) - 20 - server->vals->header_preamble_size;
|
|
int rc = 0;
|
|
int rc = 0;
|
|
struct scatterlist *sg;
|
|
struct scatterlist *sg;
|
|
u8 sign[SMB2_SIGNATURE_SIZE] = {};
|
|
u8 sign[SMB2_SIGNATURE_SIZE] = {};
|
|
@@ -2253,7 +2265,7 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, struct smb_rqst *new_rq,
|
|
goto err_free_iov;
|
|
goto err_free_iov;
|
|
|
|
|
|
/* fill the 1st iov with a transform header */
|
|
/* fill the 1st iov with a transform header */
|
|
- fill_transform_hdr(tr_hdr, old_rq);
|
|
|
|
|
|
+ fill_transform_hdr(server, tr_hdr, old_rq);
|
|
new_rq->rq_iov[0].iov_base = tr_hdr;
|
|
new_rq->rq_iov[0].iov_base = tr_hdr;
|
|
new_rq->rq_iov[0].iov_len = sizeof(struct smb2_transform_hdr);
|
|
new_rq->rq_iov[0].iov_len = sizeof(struct smb2_transform_hdr);
|
|
|
|
|
|
@@ -2335,10 +2347,10 @@ decrypt_raw_data(struct TCP_Server_Info *server, char *buf,
|
|
if (rc)
|
|
if (rc)
|
|
return rc;
|
|
return rc;
|
|
|
|
|
|
- memmove(buf + 4, iov[1].iov_base, buf_data_size);
|
|
|
|
|
|
+ memmove(buf + server->vals->header_preamble_size, iov[1].iov_base, buf_data_size);
|
|
hdr = (struct smb2_hdr *)buf;
|
|
hdr = (struct smb2_hdr *)buf;
|
|
hdr->smb2_buf_length = cpu_to_be32(buf_data_size + page_data_size);
|
|
hdr->smb2_buf_length = cpu_to_be32(buf_data_size + page_data_size);
|
|
- server->total_read = buf_data_size + page_data_size + 4;
|
|
|
|
|
|
+ server->total_read = buf_data_size + page_data_size + server->vals->header_preamble_size;
|
|
|
|
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
@@ -2442,7 +2454,7 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
- data_offset = server->ops->read_data_offset(buf) + 4;
|
|
|
|
|
|
+ data_offset = server->ops->read_data_offset(buf) + server->vals->header_preamble_size;
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
use_rdma_mr = rdata->mr;
|
|
use_rdma_mr = rdata->mr;
|
|
#endif
|
|
#endif
|
|
@@ -2538,11 +2550,12 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid)
|
|
unsigned int npages;
|
|
unsigned int npages;
|
|
struct page **pages;
|
|
struct page **pages;
|
|
unsigned int len;
|
|
unsigned int len;
|
|
- unsigned int buflen = get_rfc1002_length(buf) + 4;
|
|
|
|
|
|
+ unsigned int buflen = get_rfc1002_length(buf) + server->vals->header_preamble_size;
|
|
int rc;
|
|
int rc;
|
|
int i = 0;
|
|
int i = 0;
|
|
|
|
|
|
- len = min_t(unsigned int, buflen, server->vals->read_rsp_size - 4 +
|
|
|
|
|
|
+ len = min_t(unsigned int, buflen, server->vals->read_rsp_size -
|
|
|
|
+ server->vals->header_preamble_size +
|
|
sizeof(struct smb2_transform_hdr)) - HEADER_SIZE(server) + 1;
|
|
sizeof(struct smb2_transform_hdr)) - HEADER_SIZE(server) + 1;
|
|
|
|
|
|
rc = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1, len);
|
|
rc = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1, len);
|
|
@@ -2550,8 +2563,9 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid)
|
|
return rc;
|
|
return rc;
|
|
server->total_read += rc;
|
|
server->total_read += rc;
|
|
|
|
|
|
- len = le32_to_cpu(tr_hdr->OriginalMessageSize) + 4 -
|
|
|
|
- server->vals->read_rsp_size;
|
|
|
|
|
|
+ len = le32_to_cpu(tr_hdr->OriginalMessageSize) +
|
|
|
|
+ server->vals->header_preamble_size -
|
|
|
|
+ server->vals->read_rsp_size;
|
|
npages = DIV_ROUND_UP(len, PAGE_SIZE);
|
|
npages = DIV_ROUND_UP(len, PAGE_SIZE);
|
|
|
|
|
|
pages = kmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
|
|
pages = kmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
|
|
@@ -2577,7 +2591,8 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid)
|
|
if (rc)
|
|
if (rc)
|
|
goto free_pages;
|
|
goto free_pages;
|
|
|
|
|
|
- rc = decrypt_raw_data(server, buf, server->vals->read_rsp_size - 4,
|
|
|
|
|
|
+ rc = decrypt_raw_data(server, buf, server->vals->read_rsp_size -
|
|
|
|
+ server->vals->header_preamble_size,
|
|
pages, npages, len);
|
|
pages, npages, len);
|
|
if (rc)
|
|
if (rc)
|
|
goto free_pages;
|
|
goto free_pages;
|
|
@@ -2614,7 +2629,7 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
|
|
struct mid_q_entry *mid_entry;
|
|
struct mid_q_entry *mid_entry;
|
|
|
|
|
|
/* switch to large buffer if too big for a small one */
|
|
/* switch to large buffer if too big for a small one */
|
|
- if (pdu_length + 4 > MAX_CIFS_SMALL_BUFFER_SIZE) {
|
|
|
|
|
|
+ if (pdu_length + server->vals->header_preamble_size > MAX_CIFS_SMALL_BUFFER_SIZE) {
|
|
server->large_buf = true;
|
|
server->large_buf = true;
|
|
memcpy(server->bigbuf, buf, server->total_read);
|
|
memcpy(server->bigbuf, buf, server->total_read);
|
|
buf = server->bigbuf;
|
|
buf = server->bigbuf;
|
|
@@ -2622,12 +2637,13 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
|
|
|
|
|
|
/* now read the rest */
|
|
/* now read the rest */
|
|
length = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1,
|
|
length = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1,
|
|
- pdu_length - HEADER_SIZE(server) + 1 + 4);
|
|
|
|
|
|
+ pdu_length - HEADER_SIZE(server) + 1 +
|
|
|
|
+ server->vals->header_preamble_size);
|
|
if (length < 0)
|
|
if (length < 0)
|
|
return length;
|
|
return length;
|
|
server->total_read += length;
|
|
server->total_read += length;
|
|
|
|
|
|
- buf_size = pdu_length + 4 - sizeof(struct smb2_transform_hdr);
|
|
|
|
|
|
+ buf_size = pdu_length + server->vals->header_preamble_size - sizeof(struct smb2_transform_hdr);
|
|
length = decrypt_raw_data(server, buf, buf_size, NULL, 0, 0);
|
|
length = decrypt_raw_data(server, buf, buf_size, NULL, 0, 0);
|
|
if (length)
|
|
if (length)
|
|
return length;
|
|
return length;
|
|
@@ -2656,7 +2672,7 @@ smb3_receive_transform(struct TCP_Server_Info *server, struct mid_q_entry **mid)
|
|
struct smb2_transform_hdr *tr_hdr = (struct smb2_transform_hdr *)buf;
|
|
struct smb2_transform_hdr *tr_hdr = (struct smb2_transform_hdr *)buf;
|
|
unsigned int orig_len = le32_to_cpu(tr_hdr->OriginalMessageSize);
|
|
unsigned int orig_len = le32_to_cpu(tr_hdr->OriginalMessageSize);
|
|
|
|
|
|
- if (pdu_length + 4 < sizeof(struct smb2_transform_hdr) +
|
|
|
|
|
|
+ if (pdu_length + server->vals->header_preamble_size < sizeof(struct smb2_transform_hdr) +
|
|
sizeof(struct smb2_sync_hdr)) {
|
|
sizeof(struct smb2_sync_hdr)) {
|
|
cifs_dbg(VFS, "Transform message is too small (%u)\n",
|
|
cifs_dbg(VFS, "Transform message is too small (%u)\n",
|
|
pdu_length);
|
|
pdu_length);
|
|
@@ -2665,14 +2681,14 @@ smb3_receive_transform(struct TCP_Server_Info *server, struct mid_q_entry **mid)
|
|
return -ECONNABORTED;
|
|
return -ECONNABORTED;
|
|
}
|
|
}
|
|
|
|
|
|
- if (pdu_length + 4 < orig_len + sizeof(struct smb2_transform_hdr)) {
|
|
|
|
|
|
+ if (pdu_length + server->vals->header_preamble_size < orig_len + sizeof(struct smb2_transform_hdr)) {
|
|
cifs_dbg(VFS, "Transform message is broken\n");
|
|
cifs_dbg(VFS, "Transform message is broken\n");
|
|
cifs_reconnect(server);
|
|
cifs_reconnect(server);
|
|
wake_up(&server->response_q);
|
|
wake_up(&server->response_q);
|
|
return -ECONNABORTED;
|
|
return -ECONNABORTED;
|
|
}
|
|
}
|
|
|
|
|
|
- if (pdu_length + 4 > CIFSMaxBufSize + MAX_HEADER_SIZE(server))
|
|
|
|
|
|
+ if (pdu_length + server->vals->header_preamble_size > CIFSMaxBufSize + MAX_HEADER_SIZE(server))
|
|
return receive_encrypted_read(server, mid);
|
|
return receive_encrypted_read(server, mid);
|
|
|
|
|
|
return receive_encrypted_standard(server, mid);
|
|
return receive_encrypted_standard(server, mid);
|
|
@@ -2683,7 +2699,8 @@ smb3_handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid)
|
|
{
|
|
{
|
|
char *buf = server->large_buf ? server->bigbuf : server->smallbuf;
|
|
char *buf = server->large_buf ? server->bigbuf : server->smallbuf;
|
|
|
|
|
|
- return handle_read_data(server, mid, buf, get_rfc1002_length(buf) + 4,
|
|
|
|
|
|
+ return handle_read_data(server, mid, buf, get_rfc1002_length(buf) +
|
|
|
|
+ server->vals->header_preamble_size,
|
|
NULL, 0, 0);
|
|
NULL, 0, 0);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3088,6 +3105,7 @@ struct smb_version_values smb20_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3108,6 +3126,7 @@ struct smb_version_values smb21_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3128,6 +3147,7 @@ struct smb_version_values smb3any_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3148,6 +3168,7 @@ struct smb_version_values smbdefault_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3168,6 +3189,7 @@ struct smb_version_values smb30_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3188,6 +3210,7 @@ struct smb_version_values smb302_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|
|
@@ -3209,6 +3232,7 @@ struct smb_version_values smb311_values = {
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
.header_size = sizeof(struct smb2_hdr),
|
|
|
|
+ .header_preamble_size = 4,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.max_header_size = MAX_SMB2_HDR_SIZE,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,
|
|
.lock_cmd = SMB2_LOCK,
|
|
.lock_cmd = SMB2_LOCK,
|