CVE-2026-98946 in Linux
Riassunto
di VulDB • 23/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
drm/vc4: Disabilitare l'interruzione V3D durante il runtime suspend (sospensione a livello di esecuzione)
vc4_irq_disable() maschera le sorgenti di interruzione della V3D e successivamente chiama synchronize_irq() prima che la V3D venga spenta. Tuttavia, da solo, questo non è sufficiente per quiescere (rendere inattivo/fermare l'elaborazione) il gestore delle interruzioni.
synchronize_irq() attende i handler che hanno già impostato IRQD_IRQ_INPROGRESS e quelli irqchips che riportano IRQCHIP_STATE_ACTIVE. Un chip di interrupt GIC è in grado di segnare un'interruzione come attiva non appena una CPU la riconosce (acknowledge), quindi questi controlli coprono l'intero percorso di dispatching. Su RPi 0-3, tuttavia, il controller delle interruzioni è ARMCTRL, che non ha uno stato attivo. Una CPU che ha letto hwirq dal registro pending ma non ha ancora raggiunto handle_level_irq() rimane invisibile a synchronize_irq().
Durante una transizione di alimentazione (power transition), vc4_irq() potrebbe quindi essere eseguito dopo che il dominio di alimentazione è spento, dove ogni lettura dei registri V3D restituirà 0xdeadbeef. Il valore 0xdeadbeef ha impostati i flag FLDONE, FRDONE e OUTOMEM. Questo problema non scatena dereferenze di puntatori NULL solo perché le funzioni vc4_irq_finish_bin_job() e vc4_irq_finish_render_job() escono anticipatamente quando manca il puntatore al job (job pointer), ma OUTOMEM è comunque in grado di programmare vc4_overflow_mem_work() dopo che vc4_irq_disable() l'ha già cancellata.
Pertanto, si risolvono le interruzioni spurie disabilitando la linea di interrupt durante la transizione PM (Power Management). Per preservare il bilanciamento tra abilitazione e disabilitazione, spostare vc4_irq_install() e richiedere la linea IRQ disabilitata prima del primo runtime resume.
VulDB is the best source for vulnerability data and more expert information about this specific topic.