| From: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| Date: Tue, 23 Aug 2022 20:52:02 +0800 |
| Subject: [PATCH] cifs: Add helper function to check smb1+ server |
| Git-commit: d291e703f420d5f8f999fe54f360d54d213bddb4 |
| References: bsc#1193629 |
| Patch-mainline: v6.0-rc3 |
| |
| SMB1 server's header_preamble_size is not 0, add use is_smb1 function |
| to simplify the code, no actual functional changes. |
| |
| Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz> |
| Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Acked-by: Paulo Alcantara <palcantara@suse.de> |
| |
| fs/cifs/cifsencrypt.c | 3 +-- |
| fs/cifs/cifsglob.h | 5 +++++ |
| fs/cifs/connect.c | 10 +++++----- |
| fs/cifs/transport.c | 4 ++-- |
| 4 files changed, 13 insertions(+), 9 deletions(-) |
| |
| diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c |
| index 61a9fed56548..46f5718754f9 100644 |
| |
| |
| @@ -32,10 +32,9 @@ int __cifs_calc_signature(struct smb_rqst *rqst, |
| int rc; |
| struct kvec *iov = rqst->rq_iov; |
| int n_vec = rqst->rq_nvec; |
| - bool is_smb2 = HEADER_PREAMBLE_SIZE(server) == 0; |
| |
| /* iov[0] is actual data and not the rfc1002 length for SMB2+ */ |
| - if (is_smb2) { |
| + if (!is_smb1(server)) { |
| if (iov[0].iov_len <= 4) |
| return -EIO; |
| i = 0; |
| diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h |
| index 6c8293314530..ae7f571a7dba 100644 |
| |
| |
| @@ -752,6 +752,11 @@ struct TCP_Server_Info { |
| #endif |
| }; |
| |
| +static inline bool is_smb1(struct TCP_Server_Info *server) |
| +{ |
| + return HEADER_PREAMBLE_SIZE(server) != 0; |
| +} |
| + |
| static inline void cifs_server_lock(struct TCP_Server_Info *server) |
| { |
| unsigned int nofs_flag = memalloc_nofs_save(); |
| diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c |
| index 0123f41c26f5..a0a06b6f252b 100644 |
| |
| |
| @@ -871,7 +871,7 @@ smb2_get_credits_from_hdr(char *buffer, struct TCP_Server_Info *server) |
| /* |
| * SMB1 does not use credits. |
| */ |
| - if (HEADER_PREAMBLE_SIZE(server)) |
| + if (is_smb1(server)) |
| return 0; |
| |
| return le16_to_cpu(shdr->CreditRequest); |
| @@ -1121,7 +1121,7 @@ smb2_add_credits_from_hdr(char *buffer, struct TCP_Server_Info *server) |
| /* |
| * SMB1 does not use credits. |
| */ |
| - if (HEADER_PREAMBLE_SIZE(server)) |
| + if (is_smb1(server)) |
| return; |
| |
| if (shdr->CreditRequest) { |
| @@ -1179,10 +1179,10 @@ cifs_demultiplex_thread(void *p) |
| if (length < 0) |
| continue; |
| |
| - if (HEADER_PREAMBLE_SIZE(server) == 0) |
| - server->total_read = 0; |
| - else |
| + if (is_smb1(server)) |
| server->total_read = length; |
| + else |
| + server->total_read = 0; |
| |
| /* |
| * The right amount was read from socket - 4 bytes, |
| diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c |
| index bb1052dbac5b..c2fe035e573b 100644 |
| |
| |
| @@ -261,7 +261,7 @@ smb_rqst_len(struct TCP_Server_Info *server, struct smb_rqst *rqst) |
| int nvec; |
| unsigned long buflen = 0; |
| |
| - if (HEADER_PREAMBLE_SIZE(server) == 0 && rqst->rq_nvec >= 2 && |
| + if (!is_smb1(server) && rqst->rq_nvec >= 2 && |
| rqst->rq_iov[0].iov_len == 4) { |
| iov = &rqst->rq_iov[1]; |
| nvec = rqst->rq_nvec - 1; |
| @@ -346,7 +346,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, |
| sigprocmask(SIG_BLOCK, &mask, &oldmask); |
| |
| /* Generate a rfc1002 marker for SMB2+ */ |
| - if (HEADER_PREAMBLE_SIZE(server) == 0) { |
| + if (!is_smb1(server)) { |
| struct kvec hiov = { |
| .iov_base = &rfc1002_marker, |
| .iov_len = 4 |
| -- |
| 2.38.0 |
| |
| |