CVE-2026-80780 in Linux
Zusammenfassung
von VulDB • 04.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
HID: pidff: Behebung eines OOB-Write (Out-of-Bounds-Schreiben), wenn hid->inputs leer ist
hid_pidff_init_with_quirks() leitet sein input_dev aus
list_entry(hid->inputs.next, struct hid_input, list)
ab, ohne vorher zu prüfen, ob hid->inputs nicht leer ist. Das Listenelement von struct hid_input befindet sich an Offset 0; bei einer leeren Liste liefert list_entry() daher &hid->inputs selbst, und der folgende Lesezugriff auf hidinput->input liest ein unzusammenhängendes Mitglied von struct hid_device. dev ist daraufhin ein typverwechslungsanfälliger (type-confused) Zeiger, und die Initialisierung des Force-Feedbacks schreibt darüber: Jeder Aufruf von set_bit(FF_*, dev->ffbit) speichert 8 Bytes bei der Adresse dev + 192, also jenseits des tatsächlichen Endes des Objekts, das durch dev aliasiert wird. Darüber hinaus fügt input_ff_create() weitere Schreibzugriffe auf einen Heap-Zeiger und zwei Funktionszeiger hinzu.
Bis zur Einführung von hid-universal-pidff war der einzige Aufrufer hid_pidff_init() aus usbhid, welches unter HID_CLAIMED_INPUT ausgeführt wird und daher immer mindestens ein hid_input besitzt. universal_pidff_probe() startet das Gerät mit HID_CONNECT_DEFAULT & ~HID_CONNECT_FF und ruft dann direkt hid_pidff_init_with_quirks() auf, sobald der Deskriptor eine PID-Nutzungsseite (PID usage page) enthält, wodurch diese Schutzmaßnahme umgangen wird. Ein Berichtsdeskriptor, dessen einzige Anwendungs-Sammlung sich auf HID_UP_PID befindet, hinterlässt hid->inputs als leer, während hid_connect() über die hidraw-Zuordnung weiterhin erfolgreich ist; somit erreicht probe den ungeschützten list_entry()-Aufruf.
Der Schreibzugriff erfolgt im USB-Probe-Pfad, auf der Hotplug-Arbeitswarteschlange (workqueue); das Anschließen eines bösartigen Geräts reicht aus, um dies auszulösen. Es sind keine Angreifer-Software und kein angemeldeter Benutzer erforderlich. KASAN meldet einen 8-Byte-OOB-Schreibzugriff in hid_pidff_init_with_quirks(), der von universal_pidff_probe() erreicht wird.
Es sollte vor dem Ableiten von dev auf eine leere Liste geprüft werden, und es ist -ENODEV zurückzugeben, wie dies bei den anderen HID Force-Feedback-Treibern bereits geschieht. universal_pidff_probe() gibt diesen Fehler weiter und führt ein Unwinding (Rückabwicklung) durch.
Entdeckt von XBOW, triagiert von Baul Lee <[email protected]>
If you want to get best quality of vulnerability data, you may have to visit VulDB.