CVE-2026-89675
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
nfsd: napraw UAF w przypadku anulowania i zamykania kopiowania asynchronicznego
Kopia asynchroniczna może zostać zwolniona lub użyta po zwolnieniu podczas rozłączania programu wywołującego
(OFFLOAD_CANCEL, nfsd4_shutdown_copy, nfsd4_cancel_copy_by_sb) ścigał się
skopiuj wątek:
- find_async_copy() podbiło kopię->refcount, ale pozostawiło kopię włączoną
clp->async_copies, więc funkcja cleanup_async_copy() żniwiarza mogła zostać uruchomiona
release_copy_files() jednocześnie z funkcją wywołującą anulowanie/zamknięcie. Obydwa
put i NULL nf_src/nf_dst bez wspólnej blokady, podwójnie umieszczając
nfsd_file i wcześniejsze zwolnienie go.
- nfsd4_do_async_copy() ustawia NFSD4_COPY_F_STOPPED przed ostatecznym użyciem
kopii (nfsd_update_cmtime_attr() na kopii->nf_dst,
nfsd4_send_cb_offload()). nfsd4_stop_copy() traktuje ustawiony bit ZATRZYMANY
jako „kwątek gotowy, pomiń kthread_stop()”, więc uruchomił się program wywołujący rozbiórkę
release_copy_files() - co wstawia i NULL nf_dst - podczas gdy
kthread nadal go wyłuskiwał (NULL/UAF).
- kopia->kopia_zadanie nigdy nie była przypięta. Jednorazowy wątek sam się zbiera
return, więc funkcja get_task_struct() kthread_stop() mogła dotknąć uwolnionego
struktura_zadania.
- co_cb jest osadzony w kopii, ale funkcja nfsd4_send_cb_offload() przechowuje
odniesienie tylko na kliencie, więc jednoczesne porzucenie może być bezpłatne
kopię podczas wykonywania wywołania zwrotnego CB_OFFLOAD.
Napraw cały okres użytkowania po rozbiórce:
- find_async_copy() odłącza kopię (wyczyść cp_clp, list_del_init)
pod async_lock; ścieżki cancel, shdown i sb-cancel powodują upuszczenie pliku
odniesienie do członkostwa na liście poprzez nfs4_put_copy() po nfsd4_stop_copy().
Usuń teraz zbędną poprawkę list_del z cleanup_async_copy().
- Ponieważ odłączenie ukrywa kopię przed Reaperem, jej
cleanup_async_copy() nie może już usunąć s2s_cp_stateids kopii
wpis; ścieżki anulowania/zamknięcia/sb-cancel są teraz wywoływane
nfs4_free_copy_state() (podczas gdy cp_clp jest nadal ważny), więc
wpis nie zwisa przy zwolnionej pamięci dla pralni i
zarządzaj_cpntf_state() do wyłuskiwania.
- Nadaj kthread własne odniesienie, pobrane wcześniej z funkcji nfsd4_copy().
wake_up_process() i usunięty na końcu nfsd4_do_async_copy();
wywołaj funkcję wake_up_process() przed list_add().
- Przypnij task_struct za pomocą get_task_struct() w nfsd4_copy(), zwolniony
w nfs4_put_copy(), więc kthread_stop() jest bezpieczna zawsze, gdy kthread
wychodzi. Ustaw NFSD4_COPY_F_STOPPED tylko w nfsd4_stop_copy(), co teraz
zawsze kthread_stop()s przed release_copy_files(); ukończenie jest
nadal zgłaszane przez NFSD4_COPY_F_COMPLETED, więc
Funkcja nfsd4_has_active_async_copies() pozostaje niezmieniona. Każdy rozmówca rozbiórki
usuwa najpierw kopię z clp->async_copies, więc działa kthread_stop()
dokładnie raz.
- Weź odwołanie do kopiowania w nfsd4_send_cb_offload(), wrzucone
nfsd4_cb_offload_release(). Wątek kthread nadal posiada własne odniesienie
tam, więc refcount_inc() nie może ścigać się w finale za darmo.
- Przeczytaj cp_clp za pomocą smp_load_acquire(), aby sparować z nieuporządkowanym
autorzy set_bit()/clear_bit() (Dokumentacja/atomic_bitops.rst).
>_ 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