diff options
author | Shirish Pargaonkar <shirishpargaonkar@gmail.com> | 2013-08-29 09:35:09 -0400 |
---|---|---|
committer | Steve French <smfrench@gmail.com> | 2013-09-08 15:47:47 -0400 |
commit | d4e63bd6e40da30e965e8947b98ba75c6b973c62 (patch) | |
tree | 4f17bdbe75843ac578a9a9e1ee491192dd280d73 /fs/cifs/smb2pdu.c | |
parent | 31f92e9a87553d9d3044fe97b5fe0247e4314773 (diff) |
cifs: Process post session setup code in respective dialect functions.
Move the post (successful) session setup code to respective dialect routines.
For smb1, session key is per smb connection.
For smb2/smb3, session key is per smb session.
If client and server do not require signing, free session key for smb1/2/3.
If client and server require signing
smb1 - Copy (kmemdup) session key for the first session to connection.
Free session key of that and subsequent sessions on this connection.
smb2 - For every session, keep the session key and free it when the
session is being shutdown.
smb3 - For every session, generate the smb3 signing key using the session key
and then free the session key.
There are two unrelated line formatting changes as well.
Reviewed-by: Jeff Layton <jlayton@samba.org>
Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/smb2pdu.c')
-rw-r--r-- | fs/cifs/smb2pdu.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 7d56a5ca2abb..f56cf99e027a 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c | |||
@@ -478,6 +478,13 @@ SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses, | |||
478 | } | 478 | } |
479 | 479 | ||
480 | /* | 480 | /* |
481 | * If we are here due to reconnect, free per-smb session key | ||
482 | * in case signing was required. | ||
483 | */ | ||
484 | kfree(ses->auth_key.response); | ||
485 | ses->auth_key.response = NULL; | ||
486 | |||
487 | /* | ||
481 | * If memory allocation is successful, caller of this function | 488 | * If memory allocation is successful, caller of this function |
482 | * frees it. | 489 | * frees it. |
483 | */ | 490 | */ |
@@ -628,6 +635,30 @@ ssetup_exit: | |||
628 | /* if ntlmssp, and negotiate succeeded, proceed to authenticate phase */ | 635 | /* if ntlmssp, and negotiate succeeded, proceed to authenticate phase */ |
629 | if ((phase == NtLmChallenge) && (rc == 0)) | 636 | if ((phase == NtLmChallenge) && (rc == 0)) |
630 | goto ssetup_ntlmssp_authenticate; | 637 | goto ssetup_ntlmssp_authenticate; |
638 | |||
639 | if (!rc) { | ||
640 | mutex_lock(&server->srv_mutex); | ||
641 | if (!server->session_estab) { | ||
642 | server->sequence_number = 0x2; | ||
643 | server->session_estab = true; | ||
644 | if (server->ops->generate_signingkey) | ||
645 | server->ops->generate_signingkey(server); | ||
646 | } | ||
647 | mutex_unlock(&server->srv_mutex); | ||
648 | |||
649 | cifs_dbg(FYI, "SMB2/3 session established successfully\n"); | ||
650 | spin_lock(&GlobalMid_Lock); | ||
651 | ses->status = CifsGood; | ||
652 | ses->need_reconnect = false; | ||
653 | spin_unlock(&GlobalMid_Lock); | ||
654 | } | ||
655 | |||
656 | if (!server->sign) { | ||
657 | kfree(ses->auth_key.response); | ||
658 | ses->auth_key.response = NULL; | ||
659 | } | ||
660 | kfree(ses->ntlmssp); | ||
661 | |||
631 | return rc; | 662 | return rc; |
632 | } | 663 | } |
633 | 664 | ||