Odebrany

CVE-2026-98581

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

nfc: llcp: Napraw uszkodzenie listy / desynchronizację refcount w nfc_llcp_recv_dm()

nfc_llcp_recv_dm() obsługuje DM(NOBOUND)/DM(REJ) dla gniazda, które jest nadal
połączone na local->connecting_sockets: wyszukuje gniazdo
nfc_llcp_connecting_sock_get(), ustawia sk->sk_state = LLCP_CLOSED i
wraca, bez zdejmowania blokady gniazda i bez odłączania gniazda
z listy connect_sockets.

llcp_sock_release() wybiera listę, z której należy odłączyć połączenie za pomocą sk_state: gniazdo
w LLCP_CONNECTING jest odłączony od connect_sockets, w przeciwnym razie od
lista gniazd. Ponieważ recv_dm pozostawił gniazdo fizycznie włączone
connect_sockets, ale w stanie LLCP_CLOSED, release() przyjmuje else
oddział i wywołuje nfc_llcp_sock_unlink(&local->sockets, sk). To działa
sk_del_node_init() trzymając gniazdo.lock, czyli usuwa gniazdo
z listy hlist connect_sockets pod niewłaściwą blokadą. Równolegle
connect() łącząca inne gniazdo z connect_sockets pod
connect_sockets.lock następnie mutuje tę samą niezserializowaną listę hlist, co
psuje listę i desynchronizuje funkcję sk_add_node()/sk_del_node_init()
parowanie skarpetka_hold()/__sock_put(). Nieuprzywilejowany lokalny holding procesowy
Gniazda LLCP, z DM dostarczanym przez zdalnego partnera za pośrednictwem ustalonej sieci
Łącze LLCP, może spowodować wyciek z gniazd jądra bez ograniczeń (plik
błędne zmniejszenie przechodzi przez nieuwalniającą ścieżkę __sock_put(), więc
obiekt nigdy nie jest zwalniany), co prowadzi do wyczerpania pamięci/DoS.

Jest to błąd tej samej klasy, który został naprawiony w procedurze obsługi rodzeństwa
nfc_llcp_recv_cc() poprzez zatwierdzenie b493ea2765cc („nfc: llcp: Napraw użycie po zwolnieniu
ścigaj się w nfc_llcp_recv_cc()"); recv_dm nie otrzymał równoważnej poprawki.

Napraw to w ten sam sposób: użyj funkcji lock_sock(), ponownie sprawdź, czy gniazdo jest nieruchome
hashed (release() mógł wygrać wyścig) oraz w przypadku NOBOUND/REJ
odłącz go od connect_sockets przed przeniesieniem do LLCP_CLOSED. The
unlink usuwa odniesienie do członkostwa w connect_sockets poprzez
sk_del_node_init(), pozostawiając gniazdo niezahaszowane, więc później
nfc_llcp_sock_unlink() w llcp_sock_release() staje się niemożliwym i nie
następuje podwójne put.

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org