Podatność w sterowniku GVE (Google Virtual Ethernet) jądra Linux umożliwia wywołanie błędu divide-by-zero lub dereferencji wskaźnika NULL podczas obsługi wywołania zwrotnego NDO XDP XMIT. Oceniona jako krytyczna (CVSS 9.8), może prowadzić do destabilizacji systemu.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: gve: guard XDP xmit NDO on existence of xdp queues In GVE, dedicated XDP queues only exist when an XDP program is installed and the interface is up. As such, the NDO XDP XMIT callback should return early if either of these conditions are false. In the case of no loaded XDP program, priv->num_xdp_queues=0 which can cause a divide-by-zero error, and in the case of interface down, num_xdp_queues remains untouched to persist XDP queue count for the next interface up, but the TX pointer itself would be NULL. The XDP xmit callback also needs to synchronize with a device transitioning from open to close. This synchronization will happen via the GVE_PRIV_FLAGS_NAPI_ENABLED bit along with a synchronize_net() call, which waits for any RCU critical sections at call-time to complete.
Sterownik GVE tworzy dedykowane kolejki XDP wyłącznie wtedy, gdy zainstalowany jest program XDP i interfejs sieciowy jest aktywny. Wywołanie zwrotne NDO XDP XMIT nie sprawdzało tych warunków przed wykonaniem: gdy nie ma załadowanego programu XDP, wartość priv->num_xdp_queues wynosi 0, co powoduje błąd dzielenia przez zero (CWE-369). Gdy interfejs jest wyłączony, licznik kolejek XDP pozostaje niezmieniony, lecz wskaźnik TX przyjmuje wartość NULL, co może prowadzić do dereferencji NULL. Brakuje również synchronizacji z przejściem urządzenia ze stanu otwartego do zamkniętego.
Atakujący lub proces mogący wywołać ścieżkę kodu XDP XMIT może doprowadzić do awarii (kernel panic) lub niestabilności systemu operacyjnego, co skutkuje odmową usługi (DoS) dla całego hosta.
Należy zastosować patche dostępne u producenta zgodnie z referencjami — poprawka wprowadza wczesne wyjście z wywołania zwrotnego NDO XDP XMIT w przypadku braku załadowanego programu XDP lub nieaktywnego interfejsu, a także synchronizację przez flagę GVE_PRIV_FLAGS_NAPI_ENABLED i wywołanie synchronize_net().
Jądro Linux z włączonym sterownikiem GVE (Google Virtual Ethernet); konkretne wersje wskazane w referencjach producenta (commity: 35f44eed5828, cbe9eb2c39d0, ff7c2dea9dd1).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux6.136.4 – 6.6.70 (bez)6.7 – 6.12.9 (bez)
Powiązane podatności
Type confusion w V8 (Google Chrome) — zdalne uszkodzenie sterty
Commvault Command Center – nieuwierzytelniony RCE przez path traversal w ZIP
RCE przez YAML deserialization w IBM Aspera Faspex
RCE w VMware Workspace ONE Access i Identity Manager poprzez server-side template injection
Command Injection w VMware Workspace One Access i Identity Manager