[kernel/f16] Add patch to fix CIFS password mount option parsing (rhbz 832741)

Josh Boyer jwboyer at fedoraproject.org
Mon Jun 18 12:37:57 UTC 2012


commit fd269b5b6a111a5a77ffe1141f01eeeda25da54e
Author: Josh Boyer <jwboyer at redhat.com>
Date:   Mon Jun 18 08:36:01 2012 -0400

    Add patch to fix CIFS password mount option parsing (rhbz 832741)
    
    - Add patch to fix udl device binding (rhbz 832188)

 cifs-fix-parsing-of-password-mount-option.patch |   86 +++++++++++++++++++++++
 kernel.spec                                     |   18 +++++-
 udl-bind-fix.patch                              |   28 +++++++
 3 files changed, 131 insertions(+), 1 deletions(-)
---
diff --git a/cifs-fix-parsing-of-password-mount-option.patch b/cifs-fix-parsing-of-password-mount-option.patch
new file mode 100644
index 0000000..9805c6b
--- /dev/null
+++ b/cifs-fix-parsing-of-password-mount-option.patch
@@ -0,0 +1,86 @@
+From e73f843a3235a19de38359c91586e9eadef12238 Mon Sep 17 00:00:00 2001
+From: Suresh Jayaraman <sjayaraman at suse.com>
+Date: Tue, 12 Jun 2012 07:15:50 +0530
+Subject: [PATCH] cifs: fix parsing of password mount option
+
+The double delimiter check that allows a comma in the password parsing code is
+unconditional. We set "tmp_end" to the end of the string and we continue to
+check for double delimiter. In the case where the password doesn't contain a
+comma we end up setting tmp_end to NULL and eventually setting "options" to
+"end". This results in the premature termination of the options string and hence
+the values of UNCip and UNC are being set to NULL. This results in mount failure
+with "Connecting to DFS root not implemented yet" error.
+
+This error is usually not noticable as we have password as the last option in
+the superblock mountdata. But when we call expand_dfs_referral() from
+cifs_mount() and try to compose mount options for the submount, the resulting
+mountdata will be of the form
+
+   ",ver=1,user=foo,pass=bar,ip=x.x.x.x,unc=\\server\share"
+
+and hence results in the above error. This bug has been seen with older NAS
+servers running Samba 3.0.24.
+
+Fix this by moving the double delimiter check inside the conditional loop.
+
+Changes since -v1
+
+   - removed the wrong strlen() micro optimization.
+
+Signed-off-by: Suresh Jayaraman <sjayaraman at suse.com>
+Acked-by: Sachin Prabhu <sprabhu at redhat.com>
+Cc: stable at vger.kernel.org [3.1+]
+Signed-off-by: Steve French <sfrench at us.ibm.com>
+---
+ fs/cifs/connect.c |   32 +++++++++++++++++---------------
+ 1 files changed, 17 insertions(+), 15 deletions(-)
+
+diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
+index 78db68a..5b38407 100644
+--- a/fs/cifs/connect.c
++++ b/fs/cifs/connect.c
+@@ -1653,24 +1653,26 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
+ 			 * If yes, we have encountered a double deliminator
+ 			 * reset the NULL character to the deliminator
+ 			 */
+-			if (tmp_end < end && tmp_end[1] == delim)
++			if (tmp_end < end && tmp_end[1] == delim) {
+ 				tmp_end[0] = delim;
+ 
+-			/* Keep iterating until we get to a single deliminator
+-			 * OR the end
+-			 */
+-			while ((tmp_end = strchr(tmp_end, delim)) != NULL &&
+-			       (tmp_end[1] == delim)) {
+-				tmp_end = (char *) &tmp_end[2];
+-			}
++				/* Keep iterating until we get to a single
++				 * deliminator OR the end
++				 */
++				while ((tmp_end = strchr(tmp_end, delim))
++					!= NULL && (tmp_end[1] == delim)) {
++						tmp_end = (char *) &tmp_end[2];
++				}
+ 
+-			/* Reset var options to point to next element */
+-			if (tmp_end) {
+-				tmp_end[0] = '\0';
+-				options = (char *) &tmp_end[1];
+-			} else
+-				/* Reached the end of the mount option string */
+-				options = end;
++				/* Reset var options to point to next element */
++				if (tmp_end) {
++					tmp_end[0] = '\0';
++					options = (char *) &tmp_end[1];
++				} else
++					/* Reached the end of the mount option
++					 * string */
++					options = end;
++			}
+ 
+ 			/* Now build new password string */
+ 			temp_len = strlen(value);
+-- 
+1.7.0.4
+
diff --git a/kernel.spec b/kernel.spec
index 7d6a79c..8f67ad4 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -54,7 +54,7 @@ Summary: The Linux kernel
 # For non-released -rc kernels, this will be appended after the rcX and
 # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
 #
-%global baserelease 1
+%global baserelease 2
 %global fedora_build %{baserelease}
 
 # base_sublevel is the kernel version we're starting with and patching
@@ -772,6 +772,12 @@ Patch22024: iwlwifi-dont-mess-up-the-SCD-when-removing-a-key.patch
 Patch22030: SUNRPC-new-svc_bind-routine-introduced.patch
 Patch22031: SUNRPC-move-per-net-operations-from-svc_destroy.patch
 
+#rhbz 832741
+Patch22032: cifs-fix-parsing-of-password-mount-option.patch
+
+#rhbz 832188
+Patch22033: udl-bind-fix.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1430,6 +1436,12 @@ ApplyPatch iwlwifi-dont-mess-up-the-SCD-when-removing-a-key.patch
 ApplyPatch SUNRPC-new-svc_bind-routine-introduced.patch
 ApplyPatch SUNRPC-move-per-net-operations-from-svc_destroy.patch
 
+#rhbz 832741
+ApplyPatch cifs-fix-parsing-of-password-mount-option.patch
+
+#rhbz 832188
+ApplyPatch udl-bind-fix.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2168,6 +2180,10 @@ fi
 # and build.
 
 %changelog
+* Mon Jun 18 2012 Josh Boyer <jwboyer at redhat.com>
+- Add patch to fix CIFS password mount option parsing (rhbz 832741)
+- Add patch to fix udl device binding (rhbz 832188)
+
 * Thu Jun 14 2012 Justin M. Forbes <jforbes at redhat.com> 3.4.2-1
 - Linux 3.4.2
 
diff --git a/udl-bind-fix.patch b/udl-bind-fix.patch
new file mode 100644
index 0000000..45b4563
--- /dev/null
+++ b/udl-bind-fix.patch
@@ -0,0 +1,28 @@
+@@ -, +, @@ 
+ drivers/gpu/drm/udl/udl_drv.c |   15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+--- a/drivers/gpu/drm/udl/udl_drv.c	
++++ a/drivers/gpu/drm/udl/udl_drv.c	
+@@ -13,8 +13,21 @@ 
+ 
+ static struct drm_driver driver;
+ 
++/*
++ * There are many DisplayLink-based graphics products, all with unique PIDs.
++ * So we match on DisplayLink's VID + Vendor-Defined Interface Class (0xff)
++ * We also require a match on SubClass (0x00) and Protocol (0x00),
++ * which is compatible with all known USB 2.0 era graphics chips and firmware,
++ * but allows DisplayLink to increment those for any future incompatible chips
++ */
+ static struct usb_device_id id_table[] = {
+-	{.idVendor = 0x17e9, .match_flags = USB_DEVICE_ID_MATCH_VENDOR,},
++	{.idVendor = 0x17e9, .bInterfaceClass = 0xff,
++	 .bInterfaceSubClass = 0x00,
++	 .bInterfaceProtocol = 0x00,
++	 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
++			USB_DEVICE_ID_MATCH_INT_CLASS |
++			USB_DEVICE_ID_MATCH_INT_SUBCLASS |
++			USB_DEVICE_ID_MATCH_INT_PROTOCOL,},
+ 	{},
+ };
+ MODULE_DEVICE_TABLE(usb, id_table);


More information about the scm-commits mailing list