aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifsencrypt.c
diff options
context:
space:
mode:
authorSteve French <smfrench@austin.rr.com>2005-04-29 01:41:05 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-29 01:41:05 -0400
commitad009ac96509e005d9978d0ae9e9ec4d63ad2990 (patch)
treeeb15ee8333fd7b5816f8fe3d02250ff99601eba0 /fs/cifs/cifsencrypt.c
parentc67593a03129967eae8939c4899767182eb6d6cd (diff)
[PATCH] cifs: Fix multiuser packet signing to use the right sequence number and mac session key
Signed-off-by: Steve French (sfrench@us.ibm.com) Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/cifs/cifsencrypt.c')
-rw-r--r--fs/cifs/cifsencrypt.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
index 78829e7d8cd0..1959c7c4b185 100644
--- a/fs/cifs/cifsencrypt.c
+++ b/fs/cifs/cifsencrypt.c
@@ -50,7 +50,7 @@ static int cifs_calculate_signature(const struct smb_hdr * cifs_pdu, const char
50 return 0; 50 return 0;
51} 51}
52 52
53int cifs_sign_smb(struct smb_hdr * cifs_pdu, struct cifsSesInfo * ses, 53int cifs_sign_smb(struct smb_hdr * cifs_pdu, struct TCP_Server_Info * server,
54 __u32 * pexpected_response_sequence_number) 54 __u32 * pexpected_response_sequence_number)
55{ 55{
56 int rc = 0; 56 int rc = 0;
@@ -59,21 +59,21 @@ int cifs_sign_smb(struct smb_hdr * cifs_pdu, struct cifsSesInfo * ses,
59 /* BB remember to initialize sequence number elsewhere and initialize mac_signing key elsewhere BB */ 59 /* BB remember to initialize sequence number elsewhere and initialize mac_signing key elsewhere BB */
60 /* BB remember to add code to save expected sequence number in midQ entry BB */ 60 /* BB remember to add code to save expected sequence number in midQ entry BB */
61 61
62 if((cifs_pdu == NULL) || (ses == NULL)) 62 if((cifs_pdu == NULL) || (server == NULL))
63 return -EINVAL; 63 return -EINVAL;
64 64
65 if((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0) 65 if((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0)
66 return rc; 66 return rc;
67 67
68 spin_lock(&GlobalMid_Lock); 68 spin_lock(&GlobalMid_Lock);
69 cifs_pdu->Signature.Sequence.SequenceNumber = cpu_to_le32(ses->sequence_number); 69 cifs_pdu->Signature.Sequence.SequenceNumber = cpu_to_le32(server->sequence_number);
70 cifs_pdu->Signature.Sequence.Reserved = 0; 70 cifs_pdu->Signature.Sequence.Reserved = 0;
71 71
72 *pexpected_response_sequence_number = ses->sequence_number++; 72 *pexpected_response_sequence_number = server->sequence_number++;
73 ses->sequence_number++; 73 server->sequence_number++;
74 spin_unlock(&GlobalMid_Lock); 74 spin_unlock(&GlobalMid_Lock);
75 75
76 rc = cifs_calculate_signature(cifs_pdu, ses->mac_signing_key,smb_signature); 76 rc = cifs_calculate_signature(cifs_pdu, server->mac_signing_key,smb_signature);
77 if(rc) 77 if(rc)
78 memset(cifs_pdu->Signature.SecuritySignature, 0, 8); 78 memset(cifs_pdu->Signature.SecuritySignature, 0, 8);
79 else 79 else
@@ -190,7 +190,7 @@ int CalcNTLMv2_partial_mac_key(struct cifsSesInfo * ses, struct nls_table * nls_
190 hmac_md5_update((const unsigned char *) unicode_buf, 190 hmac_md5_update((const unsigned char *) unicode_buf,
191 (user_name_len+dom_name_len)*2,&ctx); 191 (user_name_len+dom_name_len)*2,&ctx);
192 192
193 hmac_md5_final(ses->mac_signing_key,&ctx); 193 hmac_md5_final(ses->server->mac_signing_key,&ctx);
194 kfree(ucase_buf); 194 kfree(ucase_buf);
195 kfree(unicode_buf); 195 kfree(unicode_buf);
196 return 0; 196 return 0;
@@ -200,7 +200,7 @@ void CalcNTLMv2_response(const struct cifsSesInfo * ses,char * v2_session_respon
200 struct HMACMD5Context context; 200 struct HMACMD5Context context;
201 memcpy(v2_session_response + 8, ses->server->cryptKey,8); 201 memcpy(v2_session_response + 8, ses->server->cryptKey,8);
202 /* gen_blob(v2_session_response + 16); */ 202 /* gen_blob(v2_session_response + 16); */
203 hmac_md5_init_limK_to_64(ses->mac_signing_key, 16, &context); 203 hmac_md5_init_limK_to_64(ses->server->mac_signing_key, 16, &context);
204 204
205 hmac_md5_update(ses->server->cryptKey,8,&context); 205 hmac_md5_update(ses->server->cryptKey,8,&context);
206/* hmac_md5_update(v2_session_response+16)client thing,8,&context); */ /* BB fix */ 206/* hmac_md5_update(v2_session_response+16)client thing,8,&context); */ /* BB fix */