]> git.hungrycats.org Git - linux/commitdiff
HID: asus: fix missing hid_is_usb() check
authorJann Horn <jannh@google.com>
Wed, 26 Aug 2026 13:46:56 +0000 (09:46 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 2 Sep 2026 12:31:47 +0000 (14:31 +0200)
[ Upstream commit 02bf61dfb44f17ec187d1da1a82495951bbd12df ]

to_usb_interface() can only be used on a hid_device whose parent is really
USB; uhid can create devices that identify as being on BUS_USB, but don't
actually have a USB parent.
Fix the use of to_usb_interface() without a hid_is_usb() check.

I have verified that it is currently possible to trigger a kernel splat due
to this bug in an ASAN build, and that this commit fixes the issue.

Fixes: 00e005c952f7 ("hid-asus: check ROG Ally MCU version and warn")
Cc: stable@vger.kernel.org
Signed-off-by: Jann Horn <jannh@google.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/hid-asus.c

index e1ae518bfb2170fdc5427b4a08384140e5e7ccd7..185bcdb538f24b60471d929ac5c9e4465844f764 100644 (file)
@@ -667,7 +667,7 @@ static int asus_kbd_register_leds(struct hid_device *hdev)
                        return ret;
        }
 
-       if (drvdata->quirks & QUIRK_ROG_ALLY_XPAD) {
+       if ((drvdata->quirks & QUIRK_ROG_ALLY_XPAD) && hid_is_usb(hdev)) {
                intf = to_usb_interface(hdev->dev.parent);
                udev = interface_to_usbdev(intf);
                validate_mcu_fw_version(hdev,