This is a note to let you know that I've just added the patch titled

    cifs: clean up cifs_find_smb_ses (try #2)

to the 2.6.32-longterm tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/longterm/longterm-queue-2.6.32.git;a=summary

The filename of the patch is:
     cifs-clean-up-cifs_find_smb_ses-try-2.patch
and it can be found in the queue-2.6.32 subdirectory.

If you, or anyone else, feels it should not be added to the 2.6.32 longterm 
tree,
please let <[email protected]> know about it.


>From 4ff67b720c02c36e54d55b88c2931879b7db1cd2 Mon Sep 17 00:00:00 2001
From: Jeff Layton <[email protected]>
Date: Tue, 6 Jul 2010 20:43:02 -0400
Subject: cifs: clean up cifs_find_smb_ses (try #2)

From: Jeff Layton <[email protected]>

commit 4ff67b720c02c36e54d55b88c2931879b7db1cd2 upstream.

This patch replaces the earlier patch by the same name. The only
difference is that MAX_PASSWORD_SIZE has been increased to attempt to
match the limits that windows enforces.

Do a better job of matching sessions by authtype. Matching by username
for a Kerberos session is incorrect, and anonymous sessions need special
handling.

Also, in the case where we do match by username, we also need to match
by password. That ensures that someone else doesn't "borrow" an existing
session without needing to know the password.

Finally, passwords can be longer than 16 bytes. Bump MAX_PASSWORD_SIZE
to 512 to match the size that the userspace mount helper allows.

Signed-off-by: Jeff Layton <[email protected]>
Signed-off-by: Steve French <[email protected]>
[dannf: backported to Debian's 2.6.32]
Cc: Moritz Muehlenhoff <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>


---
 fs/cifs/cifsglob.h |    2 +-
 fs/cifs/connect.c  |   26 ++++++++++++++++++--------
 2 files changed, 19 insertions(+), 9 deletions(-)

--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -33,7 +33,7 @@
 #define MAX_SHARE_SIZE  64     /* used to be 20, this should still be enough */
 #define MAX_USERNAME_SIZE 32   /* 32 is to allow for 15 char names + null
                                   termination then *2 for unicode versions */
-#define MAX_PASSWORD_SIZE 16
+#define MAX_PASSWORD_SIZE 512  /* max for windows seems to be 256 wide chars */
 
 #define CIFS_MIN_RCV_POOL 4
 
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -1588,17 +1588,27 @@ out_err:
 }
 
 static struct cifsSesInfo *
-cifs_find_smb_ses(struct TCP_Server_Info *server, char *username)
+cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol)
 {
-       struct list_head *tmp;
        struct cifsSesInfo *ses;
 
        write_lock(&cifs_tcp_ses_lock);
-       list_for_each(tmp, &server->smb_ses_list) {
-               ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list);
-               if (strncmp(ses->userName, username, MAX_USERNAME_SIZE))
-                       continue;
-
+       list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
+               switch (server->secType) {
+               case Kerberos:
+                       if (vol->linux_uid != ses->linux_uid)
+                               continue;
+                       break;
+               default:
+                       /* anything else takes username/password */
+                       if (strncmp(ses->userName, vol->username,
+                                   MAX_USERNAME_SIZE))
+                               continue;
+                       if (strlen(vol->username) != 0 &&
+                           strncmp(ses->password, vol->password,
+                                   MAX_PASSWORD_SIZE))
+                               continue;
+               }
                ++ses->ses_count;
                write_unlock(&cifs_tcp_ses_lock);
                return ses;
@@ -2362,7 +2372,7 @@ try_mount_again:
                goto out;
        }
 
-       pSesInfo = cifs_find_smb_ses(srvTcp, volume_info->username);
+       pSesInfo = cifs_find_smb_ses(srvTcp, volume_info);
        if (pSesInfo) {
                cFYI(1, ("Existing smb sess found (status=%d)",
                        pSesInfo->status));


Patches currently in longterm-queue-2.6.32 which might be from 
[email protected] are

/home/gregkh/linux/longterm/longterm-queue-2.6.32/queue-2.6.32/cifs-fix-null-pointer-dereference-in-cifs_find_smb_ses.patch
/home/gregkh/linux/longterm/longterm-queue-2.6.32/queue-2.6.32/cifs-clean-up-cifs_find_smb_ses-try-2.patch
/home/gregkh/linux/longterm/longterm-queue-2.6.32/queue-2.6.32/cifs-check-for-null-session-password.patch

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to