Re: [PATCH] HID: quirks: Add Apple Magic Trackpad 2 to hid_have_special_driver list
From: Felix Hädicke <hidden>
Date: 2021-04-05 19:11:29
Hello Benjamin, On Wed, 2020-12-02 at 11:21 +0100, Benjamin Tissoires wrote:
Hi Felix, On Wed, Dec 2, 2020 at 5:31 AM Dmitry Torokhov [off-list ref] wrote:quoted
On Thu, Nov 19, 2020 at 12:31 AM Felix Hädicke < felixhaedicke@web.de> wrote:quoted
The Apple Magic Trackpad 2 is handled by the magicmouse driver. And there were severe stability issues when both drivers (hid-generic and hid-magicmouse) were loaded for this device. Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=210241As mentioned in the bug, this hardly looks like the correct solution. The magicmouse is one of the 2 only drivers that calls `hid_register_report` and then overwrites the size of the report manually. I can not figure out immediately if this is wrong, and how that would impact a free in usbhid, but this is highly suspicious to me.
Sorry for my late reply. Now I have now found time to investigate this further, and tried to understand what effect overwriting the size of the report could have. Without success, I found nothing about this, which could explain a memory corruption. But as I commented in bug 210241 (see comment #13), usbhid_stop() is called twice for the same hid_device instance pointer. The first call seems to happen when the HID default driver tries to initialise this device, which failes (probably because the hid-magicmouse driver is already active for this device). Adding the Magic Trackpad 2 to the hid_have_special_driver list makes hid_generic_match() return false (in the hid-generic driver), and the device is ignored by this driver. Is it not the right thing to have the Magic Trackpad 2 in the hid_have_special_driver list anyway? Regards, Felix
Cheers, Benjaminquoted
+Jiri Kosina +Benjamin Tissoires for visibility.quoted
Signed-off-by: Felix Hädicke <redacted> --- drivers/hid/hid-quirks.c | 2 ++ 1 file changed, 2 insertions(+)diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c index 7a2be0205dfd..0a589d956e5c 100644 --- a/drivers/hid/hid-quirks.c +++ b/drivers/hid/hid-quirks.c@@ -473,6 +473,8 @@ static const struct hid_device_idhid_have_special_driver[] = { #if IS_ENABLED(CONFIG_HID_MAGICMOUSE) { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) }, + { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) }, #endif #if IS_ENABLED(CONFIG_HID_MAYFLASH) { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) }, -- 2.29.2Thanks. -- Dmitry