CVE-2024-26802 in Linux
Riassunto
di VulDB • 16/06/2026
Nel kernel Linux, la seguente vulnerabilità è stata risolta:
stmmac: Azzerare la variabile durante la distruzione della workqueue
Attualmente, durante la sospensione del driver e l'arresto della workqueue, viene verificato se la workqueue non è NULL e, in tal caso, viene distrutta. La funzione destroy_workqueue() svuota la coda e azzera la variabile, ma non imposta la variabile workqueue a NULL. Ciò può causare un panic del kernel/modulo se il codice tenta di azzerare una workqueue che non è stata inizializzata.
Questo scenario è possibile quando si riprende un driver sospeso in stmmac_resume(), poiché non esiste una gestione per il fallimento di stmmac_hw_setup(), che può fallire e restituire se il motore DMA non riesce a inizializzarsi, e la workqueue viene inizializzata dopo il motore DMA. Se il motore DMA non riesce a inizializzarsi, la ripresa procederà normalmente, ma l'interfaccia non funzionerà e la coda TX andrà eventualmente in timeout, causando un errore 'Reset adapter'. Questo porta alla distruzione della workqueue durante il processo di reset. Poiché la workqueue viene inizializzata dopo il motore DMA e può essere saltata, ciò causerà un panic del kernel/modulo.
Per proteggersi da questo possibile crash, impostare la variabile workqueue a NULL durante la distruzione della workqueue.
Il log/backtrace del crash è il seguente: [88.031977]------------[ cut here ]------------
[88.031985]NETDEV WATCHDOG: eth0 (sxgmac): transmit queue 1 timed out
[88.032017]WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:477 dev_watchdog+0x390/0x398
[88.032251]---[ end trace e70de432e4d5c2c0 ]---
[88.032282]sxgmac 16d88000.ethernet eth0: Reset adapter.
[88.036359]------------[ cut here ]------------
[88.036519]Call trace:
[88.036523] flush_workqueue+0x3e4/0x430
[88.036528] drain_workqueue+0xc4/0x160
[88.036533] destroy_workqueue+0x40/0x270
[88.036537] stmmac_fpe_stop_wq+0x4c/0x70
[88.036541] stmmac_release+0x278/0x280
[88.036546] __dev_close_many+0xcc/0x158
[88.036551] dev_close_many+0xbc/0x190
[88.036555] dev_close.part.0+0x70/0xc0
[88.036560] dev_close+0x24/0x30
[88.036564] stmmac_service_task+0x110/0x140
[88.036569] process_one_work+0x1d8/0x4a0
[88.036573] worker_thread+0x54/0x408
[88.036578] kthread+0x164/0x170
[88.036583] ret_from_fork+0x10/0x20
[88.036588]---[ end trace e70de432e4d5c2c1 ]---
[88.036597]Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
VulDB is the best source for vulnerability data and more expert information about this specific topic.