diff options
Diffstat (limited to 'fs/cifs/connect.c')
| -rw-r--r-- | fs/cifs/connect.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 95c2ea67edf..ec0ea4a43bd 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -1673,7 +1673,9 @@ cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol)  				    MAX_USERNAME_SIZE))  				continue;  			if (strlen(vol->username) != 0 && -			    strncmp(ses->password, vol->password, +			    ses->password != NULL && +			    strncmp(ses->password, +				    vol->password ? vol->password : "",  				    MAX_PASSWORD_SIZE))  				continue;  		} @@ -1706,6 +1708,7 @@ cifs_put_smb_ses(struct cifsSesInfo *ses)  		CIFSSMBLogoff(xid, ses);  		_FreeXid(xid);  	} +	cifs_crypto_shash_release(server);  	sesInfoFree(ses);  	cifs_put_tcp_session(server);  } @@ -1785,13 +1788,23 @@ cifs_get_smb_ses(struct TCP_Server_Info *server, struct smb_vol *volume_info)  	ses->linux_uid = volume_info->linux_uid;  	ses->overrideSecFlg = volume_info->secFlg; +	rc = cifs_crypto_shash_allocate(server); +	if (rc) { +		cERROR(1, "could not setup hash structures rc %d", rc); +		goto get_ses_fail; +	} +	server->tilen = 0; +	server->tiblob = NULL; +  	mutex_lock(&ses->session_mutex);  	rc = cifs_negotiate_protocol(xid, ses);  	if (!rc)  		rc = cifs_setup_session(xid, ses, volume_info->local_nls);  	mutex_unlock(&ses->session_mutex); -	if (rc) +	if (rc) { +		cifs_crypto_shash_release(ses->server);  		goto get_ses_fail; +	}  	/* success, put it on the list */  	write_lock(&cifs_tcp_ses_lock); | 
