]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
cifs: Fix check for tcon seal setting and fix oops on failed mount from earlier patch
authorSteve French <sfrench@us.ibm.com>
Fri, 21 Nov 2008 08:54:12 +0000 (14:24 +0530)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 5 Dec 2008 18:55:36 +0000 (10:55 -0800)
commit ab3f992983062440b4f37c666dac66d987902d91 upstream

set tcon->ses earlier

If the inital tree connect fails, we'll end up calling cifs_put_smb_ses
with a NULL pointer. Fix it by setting the tcon->ses earlier.

Acked-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Cc: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/cifs/connect.c

index 41c2ada2521464891dbed8f68750e3cd9f7bebeb..6e2be4abe8020e9862dc3b91d5a09ca88f37c0c9 100644 (file)
@@ -2256,16 +2256,18 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        cFYI(1, ("Found match on UNC path"));
                        /* existing tcon already has a reference */
                        cifs_put_smb_ses(pSesInfo);
+                       if (tcon->seal != volume_info.seal)
+                               cERROR(1, ("transport encryption setting "
+                                          "conflicts with existing tid"));
                } else {
                        tcon = tconInfoAlloc();
                        if (tcon == NULL) {
                                rc = -ENOMEM;
                                goto mount_fail_check;
                        }
+                       tcon->ses = pSesInfo;
 
                        /* check for null share name ie connect to dfs root */
-
-                       /* BB check if works for exactly length 3 strings */
                        if ((strchr(volume_info.UNC + 3, '\\') == NULL)
                            && (strchr(volume_info.UNC + 3, '/') == NULL)) {
                                /* rc = connect_to_dfs_path(...) */
@@ -2283,7 +2285,6 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        if (rc)
                                goto mount_fail_check;
                        tcon->seal = volume_info.seal;
-                       tcon->ses = pSesInfo;
                        write_lock(&cifs_tcp_ses_lock);
                        list_add(&tcon->tcon_list, &pSesInfo->tcon_list);
                        write_unlock(&cifs_tcp_ses_lock);