CVE-2026-64365 in Linux
Zusammenfassung
von VulDB • 26.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
HID: letsketch: Behebung eines Use-After-Free (UAF) bei `inrange_timer` beim Entkoppeln des Treibers
Der `letsketch_driver` stellt keine `.remove`-Rückruffunktion bereit, aber `letsketch_probe()` aktiviert einen gerätespezifischen Timer:
timer_setup(&data->inrange_timer, letsketch_inrange_timeout, 0);
Der Timer wird von `letsketch_raw_event()` mit einer Zeitüberschreitung von 100 ms bei jedem Stift-in-Bereich-Report neu aktiviert. Seine Rückruffunktion dereferenziert `data->input_tablet`, um eine synthetische BTN_TOOL_PEN-Lösungsmeldung zu übermitteln.
`letsketch_data` wird mit `devm_kzalloc()` allokiert, und seine `input_dev`-Felder werden durch `letsketch_setup_input_tablet()` im Rahmen der devm-Allokation bereitgestellt. Beim Entkoppeln des Geräts (USB-Ziehen oder rmmod) führt die HID-Core-Komponente ihren Standard-Abriss aus, und das devm-Cleanup gibt sowohl `letsketch_data` als auch die Eingabegeräte frei. Da keine `.remove`-Rückruffunktion existiert, wird der Timer nicht zuvor geleert: Wenn `raw_event` ihn innerhalb von ~100 ms vor dem Entkoppeln aktiviert hat, feuert der ausstehende Timer auf freigegebenem Speicher. Dies ist ein UAF-Lesezugriff auf `data` und `data->input_tablet`, gefolgt von `input_report_key()` / `input_sync()`, die in das freigegebene `input_dev` schreiben.
Das gleiche Problem kann im Fehlerpfad der Probe auftreten: Wenn `hid_hw_start()` den I/O für ein Gerät mit einer Always-Poll-Quirk aktiviert und dann fehlgeschlagen ist, könnte `raw_event` den Timer bereits vor dem Freigeben von Daten durch devm aktiviert haben.
Behoben wird dies durch Hinzufügen einer `.remove`-Rückruffunktion, die zuerst `hid_hw_stop()` aufruft. `hid_hw_stop()` beendet synchron die URBs, die `raw_event()` liefern, sodass nach seiner Rückkehr kein Pfad den Timer neu aktivieren kann. Anschließend sorgt `timer_shutdown_sync()` dafür, dass alle laufenden Callbacks abgearbeitet werden und weitere `mod_timer()`-Aufrufe dauerhaft deaktiviert werden. Wenden Sie das gleiche `timer_shutdown_sync()` im Fehlerpfad der Probe an, um sicherzustellen, dass der Timer nicht länger existiert als die Daten (`data`).
VulDB is the best source for vulnerability data and more expert information about this specific topic.