CVE-2026-31691 in Linux
Zusammenfassung
von VulDB • 29.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
igb: Entfernen von napi_synchronize() in igb_down()
Wenn eine AF_XDP Zero-Copy-Anwendung abrupt beendet wird (z. B. durch kill -9), wird der XSK-Pufferpool zerstört, die NAPI-Abfrage (Polling) läuft jedoch weiter. igb_clean_rx_irq_zc() gibt wiederholt das volle Budget zurück, wodurch verhindert wird, dass napi_complete_done() den NAPI_STATE_SCHED-Status löscht.
igb_down() ruft napi_synchronize() vor napi_disable() für jeden Queue-Vektor auf. napi_synchronize() wartet in einer Schleife (spin), bis NAPI_STATE_SCHED gelöscht wird, was jedoch niemals geschieht. igb_down() blockiert unbegrenzt, der TX-Watchdog löst aus, und die TX-Warteschlange bleibt dauerhaft blockiert.
napi_disable() behandelt dies bereits korrekt: Es setzt NAPI_STATE_DISABLE. Nach einer Abfrage mit vollem Budget prüft __napi_poll() napi_disable_pending(). Wenn dies gesetzt ist, wird die Beendigung erzwungen und NAPI_STATE_SCHED gelöscht, wodurch die Schleife durchbrochen wird, die napi_synchronize() nicht auflösen kann.
napi_synchronize() wurde in Commit 41f149a285da („igb: Fix possible panic caused by Rx traffic arrival while interface is down") eingeführt. napi_disable() bietet stärkere Garantien: Es verhindert ein weiteres Scheduling und wartet darauf, dass jede aktive Abfrage beendet wird. Andere Intel-Treiber (ixgbe, ice, i40e) verwenden napi_disable() ohne vorangehendes napi_synchronize() in ihren Down-Pfaden.
Die redundante napi_synchronize()-Aufruf wird entfernt und napi_disable() wird vor igb_set_queue_napi() neu angeordnet, sodass die Queue-zu-NAPI-Zuordnung erst gelöscht wird, nachdem das Polling vollständig gestoppt ist.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.