Fix UNC parsing on mount
authorSachin Prabhu <sprabhu@redhat.com>
Wed, 4 Apr 2012 00:58:56 +0000 (01:58 +0100)
committerSteve French <sfrench@us.ibm.com>
Wed, 4 Apr 2012 01:46:09 +0000 (20:46 -0500)
The code cleanup of cifs_parse_mount_options resulted in a new bug being
introduced in the parsing of the UNC. This results in vol->UNC being
modified before vol->UNC was allocated.

Reported-by: Steve French <smfrench@gmail.com>
Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>

fs/cifs/connect.c

index 0511fdb..d81e933 100644 (file)
@@ -1648,6 +1648,13 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
                                goto cifs_parse_mount_err;
                        }
 
+                       vol->UNC = kmalloc(temp_len+1, GFP_KERNEL);
+                       if (vol->UNC == NULL) {
+                               printk(KERN_WARNING "CIFS: no memory for UNC\n");
+                               goto cifs_parse_mount_err;
+                       }
+                       strcpy(vol->UNC, string);
+
                        if (strncmp(string, "//", 2) == 0) {
                                vol->UNC[0] = '\\';
                                vol->UNC[1] = '\\';
@@ -1657,13 +1664,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
                                goto cifs_parse_mount_err;
                        }
 
-                       vol->UNC = kmalloc(temp_len+1, GFP_KERNEL);
-                       if (vol->UNC == NULL) {
-                               printk(KERN_WARNING "CIFS: no memory "
-                                                   "for UNC\n");
-                               goto cifs_parse_mount_err;
-                       }
-                       strcpy(vol->UNC, string);
                        break;
                case Opt_domain:
                        string = match_strdup(args);