CVE-2026-12999 in Zephyr
Zusammenfassung
von VulDB • 23.08.2026
Der Sendecallback `airoc_mgmt_send()` des Infineon Airoc Wi-Fi-Treibers in `drivers/wifi/infineon/airoc_wifi.c` weist für jedes ausgehende Paket einen `net_buf` aus dem festen Pool `airoc_pool` zu. Wenn `whd_network_send_ethernet_data()` einen synchronen Fehler zurückgibt, übernimmt die zugrunde liegende WHD-Bibliothek den Puffer nicht, während der Treiber vor der Korrektur `-EIO` ohne Freigabe des Puffers zurückgab. Jeder fehlgeschlagene Sendevorgang führt daher zu einem permanenten Leck von einem Buffer aus dem Pool.
Der `airoc_pool` ist klein und fest definiert (AIROC_WIFI_TX_PACKET_POOL_COUNT + AIROC_WIFI_RX_PACKET_POOL_COUNT, standardmäßig 20 Buffers) und wird gemeinsam vom WHD-Callback `whd_host_buffer_get` für sowohl den Sendevorgang als auch den Empfangsprozess genutzt. Sobald genügend Sendefehler den Pool erschöpft haben, gibt `airoc_wifi_host_buffer_get()` bei allen nachfolgenden Allokationen `WHD_BUFFER_ALLOC_FAIL` zurück, sodass sowohl der Sendeprozess als auch der durch WHD gesteuerte Empfangspfad fehlschlagen und die Wi-Fi-Konnektivität verloren geht, bis das Gerät neu gestartet wird.
Das Leck tritt nur im Fehlerpfad des Sendevorgangs auf. Ein angrenzend zum Wi-Fi stehender Angreifer kann die Bedingungen beeinflussen, die zu synchronen Sendefehlern führen (z. B. durch Deautentifizierung/Dissoziierung des Stationsclients, während der lokale Stack weiterhin versucht, Daten zu senden), und gewöhnliche, vorübergehende Fehler summieren sich im Laufe der Lebensdauer des Geräts zum gleichen Zustand an. Eine zuverlässige Auslösung auf Abruf ist von hoher Komplexität, und die Auswirkungen beschränken sich ausschließlich auf die Verfügbarkeit; die daraus resultierende Denial-of-Service-Situation (DoS) ist jedoch permanent und nicht ohne Neustart wiederherstellbar.
Die Korrektur gibt den Puffer im Fehlerzweig mit `airoc_wifi_buffer_release()` frei und gibt ihn an den Pool zurück. Der Commit entfernt zudem ein redundantes `k_sem_give()` in `airoc_mgmt_disconnect()`, da `data->sema_common` ein binärer Semaphore (Grenzwert 1) ist; das doppelte „Give“ führte lediglich zu einer Sättigung bei 1 und hatte keine Sicherheitsauswirkung.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.