Katalog CVE

CVE-2026-98946

Nieznane
Opublikowano: Przetłumaczono: NVD NIST

Streszczenie

W jądrze Linux w sterowniku drm/vc4 występuje problem z wyścigiem podczas przejścia w stan uśpienia (runtime suspend). Funkcja vc4_irq_disable() wyłącza źródła przerwań V3D i wywołuje synchronize_irq(), ale na kontrolerze ARMCTRL (RPi 0-3) nie gwarantuje to wyciszenia handlera — przerwanie może zostać obsłużone po odcięciu zasilania domeny V3D, gdy odczyty rejestrów zwracają 0xdeadbeef. Może to spowodować zaplanowanie pracy vc4_overflow_mem_work() po jej anulowaniu. Poprawka polega na wyłączeniu linii przerwania na czas przejścia PM i zrównoważeniu instalacji/żądania IRQ.

Ocena ryzyka

Na platformach Raspberry Pi 0-3 może dochodzić do nieprawidłowej obsługi przerwań po wyłączeniu zasilania V3D, co prowadzi do błędnych odczytów rejestrów i potencjalnych niestabilności systemu. Ryzyko dotyczy głównie stabilności jądra i może skutkować nieprzewidywalnym zachowaniem sterownika grafiki.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla drm/vc4 (wyłączenie linii przerwania V3D podczas przejścia runtime suspend). Jeśli aktualizacja nie jest możliwa, rozważ ograniczenie zarządzania energią runtime dla sterownika vc4 na dotkniętych urządzeniach.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: drm/vc4: Disable the V3D interrupt across runtime suspend vc4_irq_disable() masks the V3D interrupt sources and then calls synchronize_irq() before the V3D is powered down. However, by itself, this is not enough to quiesce the interrupt handler. synchronize_irq() waits for handlers that have already set IRQD_IRQ_INPROGRESS, and for irqchips reporting IRQCHIP_STATE_ACTIVE. A GIC interrupt chip is able to mark an interrupt active as soon as a CPU acknowledges it, so there these checks cover the whole dispatch path. On RPi 0-3, however, the interrupt controller is ARMCTRL, which has no active state. A CPU that has read the hwirq out of the pending register but has not yet reached handle_level_irq() stays invisible to synchronize_irq(). During a power transition, vc4_irq() may therefore run after the power domain is off, where every V3D register read will return 0xdeadbeef. 0xdeadbeef has FLDONE, FRDONE and OUTOMEM set. This problem doesn't trigger NULL pointer dereference issues only because the functions vc4_irq_finish_bin_job() and vc4_irq_finish_render_job() return early when there is no job pointer, but OUTOMEM is still able to schedule vc4_overflow_mem_work() after vc4_irq_disable() has already cancelled it. Therefore, fix the spurious interrupts by disabling the interrupt line across the PM transition. To preserve the enable/disable balance, move vc4_irq_install() and request the IRQ line disabled before the first runtime resume.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS