diff options
author | Chuck Ebbert <cebbert@redhat.com> | 2010-08-06 00:44:47 -0400 |
---|---|---|
committer | Chuck Ebbert <cebbert@redhat.com> | 2010-08-06 00:44:47 -0400 |
commit | 02278bed64f873548bb483f77def738699a9012f (patch) | |
tree | 5d8883d2726e91b3173a64ce789907bb2dbc882b /hid-01-usbhid-initialize-interface-pointers-early-enough.patch | |
parent | 7512b7b33a8b2266c1b18619f0ffed5c77dcfed8 (diff) | |
download | dom0-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.patch | 40 |
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) { |