Re: S2R resume crash in 2.6.33-rc7 - NULL pointer dereference in dev_get_drvdata() for usbhid
From: Jiri Kosina <hidden>
Date: 2010-02-17 13:24:16
Also in:
lkml
On Sat, 13 Feb 2010, Bruno Prémont wrote:
quoted hunk ↗ jump to hunk
quoted
quoted
This lets me guess that hid_add_device() is doing something wrong here when report parsing fails... (as that one is the only one which could be doing the initialization of usbhid which does work for the first interface announced by my keyboard)I don't know about doing anything wrong... However it does appear that in this case the interface is registered on the HID bus but doesn't get bound to a driver. Jiri will know whether or not that's the desired outcome. On the other hand, I don't think there would be anything wrong with moving the usbhid->intf = intf; usbhid->ifnum = interface->desc.bInterfaceNumber; lines from usbhid_start() to usbhid_probe(), just before the call to hid_add_device(). It should fix the bug, and those lines do belong in the probe routine. Jiri, any problems with doing this?With the below patch (which is only half of the move work) I don't get crashes anymore. Though I wonder if other initialization steps (like the spin_lock_init() right before setting usbhid->intf) would need to be moved as well. Brunodiff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index e2997a8..690ca75 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c@@ -1154,6 +1154,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) {
Thanks for beating me with looking into this guys. I have pushed fix for this into for-next branch, so it should appear in tomorrow linux-next pile. If you still experience the problem, please let me know. Thanks, -- Jiri Kosina SUSE Labs, Novell Inc. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html