Katalog CVE

CVE-2026-98580

Niskie ryzyko· EPSS 11%
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.21%

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

Streszczenie

W jądrze Linux w module NFC LLCP występuje wyścig (race condition) w cyklu życia kolejek akceptacji gniazd. Funkcja nfc_llcp_socket_release() używa bh_lock_sock(), które nie synchronizuje się z lock_sock() w procesie accept(), co może prowadzić do use-after-free lub dereferencji NULL w nfc_llcp_accept_unlink(). Poprawka zmienia synchronizację i przenosi zwalnianie struktur do workqueue.

Ocena ryzyka

Lokalny atakujący może wywołać wyścig podczas zamykania gniazda i jednoczesnego accept(), powodując use-after-free lub awarię jądra (odmowa usługi), a potencjalnie eskalację uprawnień. Ryzyko dotyczy systemów z aktywnym stosem NFC LLCP.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla CVE-2026-98580. Jeśli NFC nie jest używane, rozważ wyłączenie modułów NFC/LLCP, aby ograniczyć powierzchnię ataku.

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: nfc: llcp: Fix race condition in accept_queue lifecycle In nfc_llcp_socket_release(), sockets and listener accept queues are walked under the local sockets rwlock and bh_lock_sock(). However, bh_lock_sock() does not synchronise against process-context lock_sock() held by nfc_llcp_accept_dequeue() during accept(). Because socket_release() does not check sock_owned_by_user(), both paths can concurrently unlink and release the same child socket, resulting in use-after-free or a NULL pointer dereference of child->parent in nfc_llcp_accept_unlink(). Fix this synchronisation race by having nfc_llcp_socket_release() use process-context lock_sock() instead of bh_lock_sock(): 1. Pop sockets from the local sockets list under the write lock using nfc_llcp_sock_list_pop() so lock_sock() can be acquired without holding the rwlock. 2. Because lock_sock() can sleep, defer the final release of the nfc_llcp_local structure to a workqueue (release_work). This avoids a sleeping-in-atomic bug when the last local reference is dropped from softirq context. Additionally, hold a single device reference on local from registration until final destruction. 3. In nfc_llcp_local_get(), use kref_get_unless_zero() to prevent resurrecting a local object whose teardown has been scheduled. 4. In llcp_sock_accept(), verify that the listener socket state is still LLCP_LISTEN after waking from schedule_timeout() to prevent hangs if the listener is closed concurrently. 5. When unlinking unaccepted child sockets during listener release, unlink them from local->sockets, call sock_orphan(), and drop their initial sk_alloc creation reference via sock_put(). 6. Make nfc_llcp_accept_unlink() idempotent by guarding parent access with a NULL check.

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