HID: usbhid: initialize interface pointers early enough
authorJiri Kosina <jkosina@suse.cz>
Wed, 17 Feb 2010 13:25:01 +0000 (14:25 +0100)
committerJiri Kosina <jkosina@suse.cz>
Wed, 17 Feb 2010 13:25:01 +0000 (14:25 +0100)
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@neptune.home>
Reported-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Bruno Prémont <bonbons@linux-vserver.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/usbhid/hid-core.c

index 74bd3ca220d3e7979442aacac5aa609869c21536..ceaf4a14b67b656ca8991572722f051925a1c858 100644 (file)
@@ -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) {