summaryrefslogtreecommitdiffstats
path: root/hid-01-usbhid-initialize-interface-pointers-early-enough.patch
diff options
context:
space:
mode:
authorChuck Ebbert <cebbert@redhat.com>2010-08-06 00:44:47 -0400
committerChuck Ebbert <cebbert@redhat.com>2010-08-06 00:44:47 -0400
commit02278bed64f873548bb483f77def738699a9012f (patch)
tree5d8883d2726e91b3173a64ce789907bb2dbc882b /hid-01-usbhid-initialize-interface-pointers-early-enough.patch
parent7512b7b33a8b2266c1b18619f0ffed5c77dcfed8 (diff)
downloaddom0-kernel-02278bed64f873548bb483f77def738699a9012f.tar.gz
dom0-kernel-02278bed64f873548bb483f77def738699a9012f.tar.xz
dom0-kernel-02278bed64f873548bb483f77def738699a9012f.zip
Fix USB HID initialization (#592785)
Diffstat (limited to 'hid-01-usbhid-initialize-interface-pointers-early-enough.patch')
-rw-r--r--hid-01-usbhid-initialize-interface-pointers-early-enough.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/hid-01-usbhid-initialize-interface-pointers-early-enough.patch b/hid-01-usbhid-initialize-interface-pointers-early-enough.patch
new file mode 100644
index 0000000..d522b3f
--- /dev/null
+++ b/hid-01-usbhid-initialize-interface-pointers-early-enough.patch
@@ -0,0 +1,40 @@
+commit 57ab12e418ec4fe24c11788bb1bbdabb29d05679
+Author: Jiri Kosina <jkosina at suse.cz>
+Date: Wed Feb 17 14:25:01 2010 +0100
+
+ HID: usbhid: initialize interface pointers early enough
+
+ Move the initialization of USB interface pointers from _start()
+ over to _probe() callback, which is where it belongs.
+
+ This fixes case where interface is NULL when parsing of report
+ descriptor fails.
+
+ LKML-Reference: <20100213135720.603e5f64 at neptune.home>
+ Reported-by: Alan Stern <stern at rowland.harvard.edu>
+ Tested-by: Bruno Prémont <bonbons at linux-vserver.org>
+ Signed-off-by: Jiri Kosina <jkosina at suse.cz>
+
+diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
+index 74bd3ca..ceaf4a1 100644
+--- a/drivers/hid/usbhid/hid-core.c
++++ b/drivers/hid/usbhid/hid-core.c
+@@ -1005,9 +1005,6 @@ static int usbhid_start(struct hid_device *hid)
+
+ spin_lock_init(&usbhid->lock);
+
+- usbhid->intf = intf;
+- usbhid->ifnum = interface->desc.bInterfaceNumber;
+-
+ usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
+ if (!usbhid->urbctrl) {
+ ret = -ENOMEM;
+@@ -1178,6 +1175,8 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
+
+ hid->driver_data = usbhid;
+ usbhid->hid = hid;
++ usbhid->intf = intf;
++ usbhid->ifnum = interface->desc.bInterfaceNumber;
+
+ ret = hid_add_device(hid);
+ if (ret) {