On Tue, 2010-08-31 at 14:41 -0400, Chase Douglas wrote: > From: Chase Douglas <chase.douglas@xxxxxxxxxx> > > The driver listens only for raw events from the device. If we allow > the hidinput layer to initialize, we can hit NULL pointer dereferences > in the hidinput layer because disconnecting only removes the hidinput > devices from the hid device while leaving the hid fields configured. > > Signed-off-by: Chase Douglas <chase.douglas@xxxxxxxxxxxxx> > --- > Note that this mimics what the hid-picolcd module does. Thanks, this approach makes sense to me. Acked-by: Michael Poole <mdpoole@xxxxxxxxxxx> > drivers/hid/hid-magicmouse.c | 13 +++++++++---- > 1 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c > index 319b0e5..d38b529 100644 > --- a/drivers/hid/hid-magicmouse.c > +++ b/drivers/hid/hid-magicmouse.c > @@ -404,15 +404,20 @@ static int magicmouse_probe(struct hid_device *hdev, > goto err_free; > } > > - ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); > + /* When registering a hid device, one of hidinput, hidraw, or hiddev > + * subsystems must claim the device. We are bypassing hidinput due to > + * our raw event processing, and hidraw and hiddev may not claim the > + * device. We get around this by telling hid_hw_start that input has > + * claimed the device already, and then flipping the bit back. > + */ > + hdev->claimed = HID_CLAIMED_INPUT; > + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_HIDINPUT); > + hdev->claimed &= ~HID_CLAIMED_INPUT; > if (ret) { > dev_err(&hdev->dev, "magicmouse hw start failed\n"); > goto err_free; > } > > - /* we are handling the input ourselves */ > - hidinput_disconnect(hdev); > - > report = hid_register_report(hdev, HID_INPUT_REPORT, TOUCH_REPORT_ID); > if (!report) { > dev_err(&hdev->dev, "unable to register touch report\n"); -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html