Skip to content

Commit 4b1d7f6

Browse files
dhowellssmfrench
authored andcommitted
cifs: Call the calc_signature functions directly
As the SMB1 and SMB2/3 calc_signature functions are called from separate sign and verify paths, just call them directly rather than using a function pointer. The SMB3 calc_signature then jumps to the SMB2 variant if necessary. Signed-off-by: David Howells <[email protected]> Acked-by: Enzo Matsumiya <[email protected]> cc: Paulo Alcantara <[email protected]> cc: Shyam Prasad N <[email protected]> cc: Tom Talpey <[email protected]> cc: [email protected] cc: [email protected] Signed-off-by: Steve French <[email protected]>
1 parent 72ed55b commit 4b1d7f6

File tree

4 files changed

+9
-21
lines changed

4 files changed

+9
-21
lines changed

fs/smb/client/cifsglob.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -534,8 +534,6 @@ struct smb_version_operations {
534534
void (*new_lease_key)(struct cifs_fid *);
535535
int (*generate_signingkey)(struct cifs_ses *ses,
536536
struct TCP_Server_Info *server);
537-
int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *,
538-
bool allocate_crypto);
539537
int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
540538
struct cifsFileInfo *src_file);
541539
int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,

fs/smb/client/smb2ops.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5446,7 +5446,6 @@ struct smb_version_operations smb20_operations = {
54465446
.get_lease_key = smb2_get_lease_key,
54475447
.set_lease_key = smb2_set_lease_key,
54485448
.new_lease_key = smb2_new_lease_key,
5449-
.calc_signature = smb2_calc_signature,
54505449
.is_read_op = smb2_is_read_op,
54515450
.set_oplock_level = smb2_set_oplock_level,
54525451
.create_lease_buf = smb2_create_lease_buf,
@@ -5550,7 +5549,6 @@ struct smb_version_operations smb21_operations = {
55505549
.get_lease_key = smb2_get_lease_key,
55515550
.set_lease_key = smb2_set_lease_key,
55525551
.new_lease_key = smb2_new_lease_key,
5553-
.calc_signature = smb2_calc_signature,
55545552
.is_read_op = smb21_is_read_op,
55555553
.set_oplock_level = smb21_set_oplock_level,
55565554
.create_lease_buf = smb2_create_lease_buf,
@@ -5660,7 +5658,6 @@ struct smb_version_operations smb30_operations = {
56605658
.set_lease_key = smb2_set_lease_key,
56615659
.new_lease_key = smb2_new_lease_key,
56625660
.generate_signingkey = generate_smb30signingkey,
5663-
.calc_signature = smb3_calc_signature,
56645661
.set_integrity = smb3_set_integrity,
56655662
.is_read_op = smb21_is_read_op,
56665663
.set_oplock_level = smb3_set_oplock_level,
@@ -5777,7 +5774,6 @@ struct smb_version_operations smb311_operations = {
57775774
.set_lease_key = smb2_set_lease_key,
57785775
.new_lease_key = smb2_new_lease_key,
57795776
.generate_signingkey = generate_smb311signingkey,
5780-
.calc_signature = smb3_calc_signature,
57815777
.set_integrity = smb3_set_integrity,
57825778
.is_read_op = smb21_is_read_op,
57835779
.set_oplock_level = smb3_set_oplock_level,

fs/smb/client/smb2proto.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@ extern struct mid_q_entry *smb2_setup_async_request(
3939
struct TCP_Server_Info *server, struct smb_rqst *rqst);
4040
extern struct cifs_tcon *smb2_find_smb_tcon(struct TCP_Server_Info *server,
4141
__u64 ses_id, __u32 tid);
42-
extern int smb2_calc_signature(struct smb_rqst *rqst,
43-
struct TCP_Server_Info *server,
44-
bool allocate_crypto);
45-
extern int smb3_calc_signature(struct smb_rqst *rqst,
46-
struct TCP_Server_Info *server,
47-
bool allocate_crypto);
4842
extern void smb2_echo_request(struct work_struct *work);
4943
extern __le32 smb2_get_lease_state(struct cifsInodeInfo *cinode);
5044
extern bool smb2_is_valid_oplock_break(char *buffer,

fs/smb/client/smb2transport.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,9 @@ smb2_find_smb_tcon(struct TCP_Server_Info *server, __u64 ses_id, __u32 tid)
209209
return tcon;
210210
}
211211

212-
int
212+
static int
213213
smb2_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
214-
bool allocate_crypto)
214+
bool allocate_crypto)
215215
{
216216
int rc;
217217
unsigned char smb2_signature[SMB2_HMACSHA256_SIZE];
@@ -465,9 +465,9 @@ generate_smb311signingkey(struct cifs_ses *ses,
465465
return generate_smb3signingkey(ses, server, &triplet);
466466
}
467467

468-
int
468+
static int
469469
smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
470-
bool allocate_crypto)
470+
bool allocate_crypto)
471471
{
472472
int rc;
473473
unsigned char smb3_signature[SMB2_CMACAES_SIZE];
@@ -477,6 +477,9 @@ smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
477477
struct smb_rqst drqst;
478478
u8 key[SMB3_SIGN_KEY_SIZE];
479479

480+
if (server->vals->protocol_id <= SMB21_PROT_ID)
481+
return smb2_calc_signature(rqst, server, allocate_crypto);
482+
480483
rc = smb3_get_sign_key(le64_to_cpu(shdr->SessionId), server, key);
481484
if (unlikely(rc)) {
482485
cifs_server_dbg(FYI, "%s: Could not get signing key\n", __func__);
@@ -547,7 +550,6 @@ smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
547550
static int
548551
smb2_sign_rqst(struct smb_rqst *rqst, struct TCP_Server_Info *server)
549552
{
550-
int rc = 0;
551553
struct smb2_hdr *shdr;
552554
struct smb2_sess_setup_req *ssr;
553555
bool is_binding;
@@ -574,9 +576,7 @@ smb2_sign_rqst(struct smb_rqst *rqst, struct TCP_Server_Info *server)
574576
return 0;
575577
}
576578

577-
rc = server->ops->calc_signature(rqst, server, false);
578-
579-
return rc;
579+
return smb3_calc_signature(rqst, server, false);
580580
}
581581

582582
int
@@ -612,7 +612,7 @@ smb2_verify_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server)
612612

613613
memset(shdr->Signature, 0, SMB2_SIGNATURE_SIZE);
614614

615-
rc = server->ops->calc_signature(rqst, server, true);
615+
rc = smb3_calc_signature(rqst, server, true);
616616

617617
if (rc)
618618
return rc;

0 commit comments

Comments
 (0)