CVE-2026-64428 in Linux
Zusammenfassung
von VulDB • 25.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
gpio: sch: Verwendung von raw_spinlock_t im IRQ-Startpfad
sch_irq_unmask() aktiviert den GPIO-IRQ und aktualisiert anschließend den Controller-Zustand über sch_irq_mask_unmask(), wobei sch->lock mit spin_lock_irqsave() gesperrt wird. Der Callback kann während der Einrichtung eines angeforderten IRQs von irq_startup() aus aufgerufen werden. Dieser Pfad ist nicht schlafbar (non-sleepable), aber unter PREEMPT_RT wird ein regulärer spinlock_t zu einem schlafenden Lock.
Dieses Problem wurde durch unser statisches Analyse-Tool gefunden und anschließend manuell gegen den aktuellen Tree überprüft.
Der PoC mit geerdetem Eingang hielt die Aufrufkette request_threaded_irq() -> __setup_irq() -> irq_startup() -> sch_irq_unmask() -> sch_irq_mask_unmask() aufrecht und verwendete die ursprüngliche Kante von spin_lock_irqsave(&sch->lock). Lockdep meldete:
BUG: sleeping function called from invalid context hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv]
sch_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv]
sch_irq_mask_unmask.constprop.0+0x31/0x70 [vuln_msv]
__setup_irq.constprop.0+0xd/0x30 [vuln_msv]
Konvertieren Sie den SCH-Controller-Lock zu raw_spinlock_t. Derselbe Lock wird auch von den GPIO-Richtungs- und Wert-Callbacks verwendet, aber diese kritischen Abschnitte aktualisieren nur MMIO-gestützte GPIO-Register und enthalten keine schlafbaren Operationen. Die Beibehaltung dieses Register-Locks als nicht-schlafend ist daher für die irqchip-Calls angemessen und ändert den Sperrvertrag auf der GPIO-Seite nicht.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.