Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / fs / cifs / cifsencrypt.c
index 6aeb8d4616a40a4673a63c49b6c77752e67b1ce4..8347c90cf483cefbce4995a107666bba61ae7ef4 100644 (file)
@@ -743,24 +743,26 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
 
        memcpy(ses->auth_key.response + baselen, tiblob, tilen);
 
+       mutex_lock(&ses->server->srv_mutex);
+
        rc = crypto_hmacmd5_alloc(ses->server);
        if (rc) {
                cifs_dbg(VFS, "could not crypto alloc hmacmd5 rc %d\n", rc);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        /* calculate ntlmv2_hash */
        rc = calc_ntlmv2_hash(ses, ntlmv2_hash, nls_cp);
        if (rc) {
                cifs_dbg(VFS, "could not get v2 hash rc %d\n", rc);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        /* calculate first part of the client response (CR1) */
        rc = CalcNTLMv2_response(ses, ntlmv2_hash);
        if (rc) {
                cifs_dbg(VFS, "Could not calculate CR1 rc: %d\n", rc);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        /* now calculate the session key for NTLMv2 */
@@ -769,13 +771,13 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
        if (rc) {
                cifs_dbg(VFS, "%s: Could not set NTLMV2 Hash as a key\n",
                         __func__);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        rc = crypto_shash_init(&ses->server->secmech.sdeschmacmd5->shash);
        if (rc) {
                cifs_dbg(VFS, "%s: Could not init hmacmd5\n", __func__);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        rc = crypto_shash_update(&ses->server->secmech.sdeschmacmd5->shash,
@@ -783,7 +785,7 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
                CIFS_HMAC_MD5_HASH_SIZE);
        if (rc) {
                cifs_dbg(VFS, "%s: Could not update with response\n", __func__);
-               goto setup_ntlmv2_rsp_ret;
+               goto unlock;
        }
 
        rc = crypto_shash_final(&ses->server->secmech.sdeschmacmd5->shash,
@@ -791,6 +793,8 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
        if (rc)
                cifs_dbg(VFS, "%s: Could not generate md5 hash\n", __func__);
 
+unlock:
+       mutex_unlock(&ses->server->srv_mutex);
 setup_ntlmv2_rsp_ret:
        kfree(tiblob);