mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-28 21:45:01 +08:00
ksmbd: avoid duplicate negotiate ctx offset increments
[ Upstream commit a12a07a85a
]
Both pneg_ctxt and ctxt_size change in unison, with each adding the
length of the previously added context, rounded up to an eight byte
boundary.
Drop pneg_ctxt increments and instead use the ctxt_size offset when
passing output pointers to per-context helper functions. This slightly
simplifies offset tracking and shaves off a few text bytes.
Before (x86-64 gcc 7.5):
text data bss dec hex filename
213234 8677 672 222583 36577 ksmbd.ko
After:
text data bss dec hex filename
213218 8677 672 222567 36567 ksmbd.ko
Signed-off-by: David Disseldorp <ddiss@suse.de>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2ca23947df
commit
0dbfcc34ef
@ -839,7 +839,7 @@ static void assemble_neg_contexts(struct ksmbd_conn *conn,
|
||||
struct smb2_negotiate_rsp *rsp,
|
||||
void *smb2_buf_len)
|
||||
{
|
||||
char *pneg_ctxt = (char *)rsp +
|
||||
char * const pneg_ctxt = (char *)rsp +
|
||||
le32_to_cpu(rsp->NegotiateContextOffset);
|
||||
int neg_ctxt_cnt = 1;
|
||||
int ctxt_size;
|
||||
@ -850,21 +850,17 @@ static void assemble_neg_contexts(struct ksmbd_conn *conn,
|
||||
conn->preauth_info->Preauth_HashId);
|
||||
inc_rfc1001_len(smb2_buf_len, AUTH_GSS_PADDING);
|
||||
ctxt_size = sizeof(struct smb2_preauth_neg_context);
|
||||
/* Round to 8 byte boundary */
|
||||
pneg_ctxt += round_up(sizeof(struct smb2_preauth_neg_context), 8);
|
||||
|
||||
if (conn->cipher_type) {
|
||||
/* Round to 8 byte boundary */
|
||||
ctxt_size = round_up(ctxt_size, 8);
|
||||
ksmbd_debug(SMB,
|
||||
"assemble SMB2_ENCRYPTION_CAPABILITIES context\n");
|
||||
build_encrypt_ctxt((struct smb2_encryption_neg_context *)pneg_ctxt,
|
||||
build_encrypt_ctxt((struct smb2_encryption_neg_context *)
|
||||
(pneg_ctxt + ctxt_size),
|
||||
conn->cipher_type);
|
||||
neg_ctxt_cnt++;
|
||||
ctxt_size += sizeof(struct smb2_encryption_neg_context) + 2;
|
||||
/* Round to 8 byte boundary */
|
||||
pneg_ctxt +=
|
||||
round_up(sizeof(struct smb2_encryption_neg_context) + 2,
|
||||
8);
|
||||
}
|
||||
|
||||
if (conn->compress_algorithm) {
|
||||
@ -872,31 +868,29 @@ static void assemble_neg_contexts(struct ksmbd_conn *conn,
|
||||
ksmbd_debug(SMB,
|
||||
"assemble SMB2_COMPRESSION_CAPABILITIES context\n");
|
||||
/* Temporarily set to SMB3_COMPRESS_NONE */
|
||||
build_compression_ctxt((struct smb2_compression_ctx *)pneg_ctxt,
|
||||
build_compression_ctxt((struct smb2_compression_ctx *)
|
||||
(pneg_ctxt + ctxt_size),
|
||||
conn->compress_algorithm);
|
||||
neg_ctxt_cnt++;
|
||||
ctxt_size += sizeof(struct smb2_compression_ctx) + 2;
|
||||
/* Round to 8 byte boundary */
|
||||
pneg_ctxt += round_up(sizeof(struct smb2_compression_ctx) + 2,
|
||||
8);
|
||||
}
|
||||
|
||||
if (conn->posix_ext_supported) {
|
||||
ctxt_size = round_up(ctxt_size, 8);
|
||||
ksmbd_debug(SMB,
|
||||
"assemble SMB2_POSIX_EXTENSIONS_AVAILABLE context\n");
|
||||
build_posix_ctxt((struct smb2_posix_neg_context *)pneg_ctxt);
|
||||
build_posix_ctxt((struct smb2_posix_neg_context *)
|
||||
(pneg_ctxt + ctxt_size));
|
||||
neg_ctxt_cnt++;
|
||||
ctxt_size += sizeof(struct smb2_posix_neg_context);
|
||||
/* Round to 8 byte boundary */
|
||||
pneg_ctxt += round_up(sizeof(struct smb2_posix_neg_context), 8);
|
||||
}
|
||||
|
||||
if (conn->signing_negotiated) {
|
||||
ctxt_size = round_up(ctxt_size, 8);
|
||||
ksmbd_debug(SMB,
|
||||
"assemble SMB2_SIGNING_CAPABILITIES context\n");
|
||||
build_sign_cap_ctxt((struct smb2_signing_capabilities *)pneg_ctxt,
|
||||
build_sign_cap_ctxt((struct smb2_signing_capabilities *)
|
||||
(pneg_ctxt + ctxt_size),
|
||||
conn->signing_algorithm);
|
||||
neg_ctxt_cnt++;
|
||||
ctxt_size += sizeof(struct smb2_signing_capabilities) + 2;
|
||||
|
Loading…
Reference in New Issue
Block a user