diff options
Diffstat (limited to 'fs/cifs/cifsencrypt.c')
-rw-r--r-- | fs/cifs/cifsencrypt.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c index 35bf329c90e1..0db5f1de0227 100644 --- a/fs/cifs/cifsencrypt.c +++ b/fs/cifs/cifsencrypt.c | |||
@@ -36,11 +36,6 @@ | |||
36 | /* Note that the smb header signature field on input contains the | 36 | /* Note that the smb header signature field on input contains the |
37 | sequence number before this function is called */ | 37 | sequence number before this function is called */ |
38 | 38 | ||
39 | extern void mdfour(unsigned char *out, unsigned char *in, int n); | ||
40 | extern void E_md4hash(const unsigned char *passwd, unsigned char *p16); | ||
41 | extern void SMBencrypt(unsigned char *passwd, const unsigned char *c8, | ||
42 | unsigned char *p24); | ||
43 | |||
44 | static int cifs_calculate_signature(const struct smb_hdr *cifs_pdu, | 39 | static int cifs_calculate_signature(const struct smb_hdr *cifs_pdu, |
45 | struct TCP_Server_Info *server, char *signature) | 40 | struct TCP_Server_Info *server, char *signature) |
46 | { | 41 | { |
@@ -233,6 +228,7 @@ int cifs_verify_signature(struct smb_hdr *cifs_pdu, | |||
233 | /* first calculate 24 bytes ntlm response and then 16 byte session key */ | 228 | /* first calculate 24 bytes ntlm response and then 16 byte session key */ |
234 | int setup_ntlm_response(struct cifsSesInfo *ses) | 229 | int setup_ntlm_response(struct cifsSesInfo *ses) |
235 | { | 230 | { |
231 | int rc = 0; | ||
236 | unsigned int temp_len = CIFS_SESS_KEY_SIZE + CIFS_AUTH_RESP_SIZE; | 232 | unsigned int temp_len = CIFS_SESS_KEY_SIZE + CIFS_AUTH_RESP_SIZE; |
237 | char temp_key[CIFS_SESS_KEY_SIZE]; | 233 | char temp_key[CIFS_SESS_KEY_SIZE]; |
238 | 234 | ||
@@ -246,13 +242,26 @@ int setup_ntlm_response(struct cifsSesInfo *ses) | |||
246 | } | 242 | } |
247 | ses->auth_key.len = temp_len; | 243 | ses->auth_key.len = temp_len; |
248 | 244 | ||
249 | SMBNTencrypt(ses->password, ses->server->cryptkey, | 245 | rc = SMBNTencrypt(ses->password, ses->server->cryptkey, |
250 | ses->auth_key.response + CIFS_SESS_KEY_SIZE); | 246 | ses->auth_key.response + CIFS_SESS_KEY_SIZE); |
247 | if (rc) { | ||
248 | cFYI(1, "%s Can't generate NTLM response, error: %d", | ||
249 | __func__, rc); | ||
250 | return rc; | ||
251 | } | ||
252 | |||
253 | rc = E_md4hash(ses->password, temp_key); | ||
254 | if (rc) { | ||
255 | cFYI(1, "%s Can't generate NT hash, error: %d", __func__, rc); | ||
256 | return rc; | ||
257 | } | ||
251 | 258 | ||
252 | E_md4hash(ses->password, temp_key); | 259 | rc = mdfour(ses->auth_key.response, temp_key, CIFS_SESS_KEY_SIZE); |
253 | mdfour(ses->auth_key.response, temp_key, CIFS_SESS_KEY_SIZE); | 260 | if (rc) |
261 | cFYI(1, "%s Can't generate NTLM session key, error: %d", | ||
262 | __func__, rc); | ||
254 | 263 | ||
255 | return 0; | 264 | return rc; |
256 | } | 265 | } |
257 | 266 | ||
258 | #ifdef CONFIG_CIFS_WEAK_PW_HASH | 267 | #ifdef CONFIG_CIFS_WEAK_PW_HASH |
@@ -699,14 +708,13 @@ cifs_crypto_shash_allocate(struct TCP_Server_Info *server) | |||
699 | unsigned int size; | 708 | unsigned int size; |
700 | 709 | ||
701 | server->secmech.hmacmd5 = crypto_alloc_shash("hmac(md5)", 0, 0); | 710 | server->secmech.hmacmd5 = crypto_alloc_shash("hmac(md5)", 0, 0); |
702 | if (!server->secmech.hmacmd5 || | 711 | if (IS_ERR(server->secmech.hmacmd5)) { |
703 | IS_ERR(server->secmech.hmacmd5)) { | ||
704 | cERROR(1, "could not allocate crypto hmacmd5\n"); | 712 | cERROR(1, "could not allocate crypto hmacmd5\n"); |
705 | return PTR_ERR(server->secmech.hmacmd5); | 713 | return PTR_ERR(server->secmech.hmacmd5); |
706 | } | 714 | } |
707 | 715 | ||
708 | server->secmech.md5 = crypto_alloc_shash("md5", 0, 0); | 716 | server->secmech.md5 = crypto_alloc_shash("md5", 0, 0); |
709 | if (!server->secmech.md5 || IS_ERR(server->secmech.md5)) { | 717 | if (IS_ERR(server->secmech.md5)) { |
710 | cERROR(1, "could not allocate crypto md5\n"); | 718 | cERROR(1, "could not allocate crypto md5\n"); |
711 | rc = PTR_ERR(server->secmech.md5); | 719 | rc = PTR_ERR(server->secmech.md5); |
712 | goto crypto_allocate_md5_fail; | 720 | goto crypto_allocate_md5_fail; |