CVE-2026-98580
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
nfc: llcp: Napraw sytuację wyścigu w cyklu życia Accept_queue
W funkcji nfc_llcp_socket_release() gniazda i słuchacze akceptują kolejki
przeszedłem pod lokalne gniazda rwlock i bh_lock_sock(). Jednakże,
bh_lock_sock() nie synchronizuje się z kontekstem procesu lock_sock()
trzymane przez nfc_llcp_accept_dequeue() podczas Accept(). Ponieważ
Socket_release() nie sprawdza sock_owned_by_user(), obie ścieżki mogą
jednocześnie odłącz i zwolnij to samo gniazdo podrzędne, co spowoduje
use-after-free lub dereferencja wskaźnika NULL do elementu dziecko->rodzic w
nfc_llcp_accept_unlink().
Napraw ten wyścig synchronizacji, używając funkcji nfc_llcp_socket_release().
lock_sock() w kontekście procesu zamiast bh_lock_sock():
1. Wyskakuj gniazda z listy gniazd lokalnych pod blokadą zapisu, używając
nfc_llcp_sock_list_pop(), więc lock_sock() można uzyskać bez
trzymając rwlock.
2. Ponieważ funkcja lock_sock() może spać, odłóż ostateczne wydanie funkcji
nfc_llcp_local do kolejki roboczej (release_work). To pozwala uniknąć
błąd uśpiony w atomie, gdy zostanie usunięte ostatnie lokalne odniesienie
z kontekstu Softirq. Dodatkowo przechowuj odniesienie do pojedynczego urządzenia
na miejscu od rejestracji aż do ostatecznego zniszczenia.
3. W nfc_llcp_local_get() użyj kref_get_unless_zero(), aby zapobiec
wskrzeszenie lokalnego obiektu, którego rozbiórkę zaplanowano.
4. W funkcji llcp_sock_accept() sprawdź, czy stan gniazda nasłuchiwania jest nieruchomy
LLCP_LISTEN po przebudzeniu z funkcjiharmonogram_timeout(), aby zapobiec zawieszaniu się, jeśli
słuchacz jest jednocześnie zamknięty.
5. Podczas odłączania nieakceptowanych gniazd podrzędnych podczas zwalniania słuchacza,
odłącz je od gniazd lokalnych->, wywołaj metodę sock_orphan() i usuń je
początkowe odniesienie do tworzenia sk_alloc za pomocą sock_put().
6. Ustaw funkcję nfc_llcp_accept_unlink() jako idempotentną, chroniąc dostęp rodziców za pomocą
sprawdzenie NULL.
>_ Referencje
- https://git.kernel.org/stable/c/41256821762a7114906b178826d17098e2fa5992
- https://git.kernel.org/stable/c/53867f6acb1af7f12d6485fa8a2819318f89083b
- https://git.kernel.org/stable/c/54adcabb0f1deef1bdae5fc64779ed6d442721c9
- https://git.kernel.org/stable/c/7c938aad5108382c6ad7453c4b5ee8ae3f3252ed
- https://git.kernel.org/stable/c/c3eef2f988a3db9690369d7cef9a3344dd9788d3
- https://git.kernel.org/stable/c/d2093a0981138876212bc5f473bdbfba0786e064
- https://git.kernel.org/stable/c/d5e1c92d09caed19f2988739695ce611a86ba6f8
- https://git.kernel.org/stable/c/da8a07757383614a8380a0f7dd54749d2687b82e
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