Katalog CVE

CVE-2026-99050

WysokieCVSS 7.8
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.21%

Percentyl 10 - wyżej niż 10% wszystkich znanych CVE

Streszczenie

W jądrze Linux sterownik gpio-mpsse w gpio_mpsse_irq_enable() uruchamiał worker poll przed dodaniem go do listy priv->workers. Jeśli gpio_mpsse_disconnect() przechodził listę w tym oknie, pomijał worker, a po zwolnieniu mpsse_priv osierocony gpio_mpsse_poll() nadal uzyskiwał do niego dostęp, powodując use-after-free. Poprawka publikuje i uzbraja worker w jednej sekcji krytycznej irq_spin oraz dodaje flagę priv->dying.

Ocena ryzyka

Wyścig może prowadzić do use-after-free podczas odłączania urządzenia USB GPIO, co może powodować awarie jądra lub potencjalne wykorzystanie błędu. Problem dotyczy urządzeń obsługiwanych przez gpio-mpsse.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę synchronizacji uzbrajania workera IRQ w gpio-mpsse. Unikaj odłączania takich urządzeń podczas aktywnego użytku do czasu wdrożenia aktualizacji.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: gpio: mpsse: fix race when arming the IRQ poll worker gpio_mpsse_irq_enable() arms the poll worker before publishing it: schedule_work() runs before the worker is added to priv->workers. If gpio_mpsse_disconnect() walks the list in that window it misses the worker, and once disconnect returns, the USB core frees mpsse_priv while the orphaned gpio_mpsse_poll() work keeps accessing it, causing a use-after-free. Fix this by publishing and arming the worker in one irq_spin critical section. Teardown walks the same list under irq_spin, so a worker found on the list is guaranteed to be armed, and cancel_work_sync() handles it whether it is queued or running. A worker armed after the disconnect walk would still be missed, so also set a new priv->dying flag under irq_spin before the teardown walk, and check it in the same critical section, freeing it via kfree_rcu() instead when the device is going away, since kfree() would be called with the IRQ core's raw spinlock held and may sleep on PREEMPT_RT. schedule_work() is safe to call with irq_spin held, and the next probe gets a fresh mpsse_priv, so the flag never needs to be cleared. This issue was found by an in-house static analysis tool.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS