From 45c8ab60f8b8cbea46e8717ec548b41c0096c951 Mon Sep 17 00:00:00 2001 From: Yousef Alhouseen Date: Tue, 30 Jun 2026 23:18:45 +0200 Subject: [PATCH] HID: hiddev: set report-init policy before device registration usb_register_dev() publishes the hiddev character device before hiddev_connect() initializes the report policy. A process that opens the new node immediately can issue a usage ioctl while initialized is still false and trigger usbhid_init_reports(), bypassing HID_QUIRK_NO_INIT_REPORTS. Set initialized before registering the character device so every opener observes the quirk-selected policy. Signed-off-by: Yousef Alhouseen Signed-off-by: Jiri Kosina --- drivers/hid/usbhid/hiddev.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index 21396481995b..8430655c00fe 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c @@ -903,6 +903,8 @@ int hiddev_connect(struct hid_device *hid, unsigned int force) hid->hiddev = hiddev; hiddev->hid = hid; hiddev->exist = 1; + /* Honor NO_INIT_REPORTS before the character device becomes visible. */ + hiddev->initialized = hid->quirks & HID_QUIRK_NO_INIT_REPORTS; retval = usb_register_dev(usbhid->intf, &hiddev_class); if (retval) { hid_err(hid, "Not able to get a minor for this device\n"); @@ -911,12 +913,6 @@ int hiddev_connect(struct hid_device *hid, unsigned int force) return retval; } - /* - * If HID_QUIRK_NO_INIT_REPORTS is set, make sure we don't initialize - * the reports. - */ - hiddev->initialized = hid->quirks & HID_QUIRK_NO_INIT_REPORTS; - hiddev->minor = usbhid->intf->minor; return 0;