CVE-2026-89663
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
nfsd: unieważnij stateidy powiadamiające o kopiowaniu przed usunięciem ich odniesienia
Stateidy z kopią i powiadomieniem żyją w IDR s2s_cp_stateids i na swoim rodzicu
sc_cp_list stid, przypięty przez pojedyncze odniesienie do członkostwa.
_free_cpntf_state_locked() odłącza wpis dopiero po osiągnięciu jego przeliczenia
zero, więc dowolna ścieżka odwołania działająca jednocześnie
Posiadacz find_cpntf_state()/manage_cpntf_state() ma zwiększone spadki liczby cs_count
odniesienie bez odłączania, pozostawiając wpis możliwy do wykrycia wraz z jego
odniesienie do członkostwa zostało już wykorzystane. Drugie unieważnienie lub haczyk w pralni
następnie zwalnia go, podczas gdy czytelnik nadal trzyma wskaźnik - a
Wykrywalne przez KASAN użycie po zwolnieniu w nfs4_put_cpntf_state().
Miało to wpływ na wszystkie trzy ścieżki unieważnienia:
- Wielokrotnie wywoływany drenaż nadrzędny (nfs4_free_cpntf_statelist()).
_free_cpntf_state_locked() na pierwszym wpisie na liście; posiadacz, który miał
natknięty cs_count sprawił, że powrócił wcześniej, więc następna iteracja
ponownie zmniejszono i spalono referencje posiadacza.
- OFFLOAD_CANCEL (manage_cpntf_state()) i wygaśnięcie pralni podobnie
użyłem _free_cpntf_state_locked() i mogłem upuścić 2->1 bez rozłączania.
Dodaj funkcję revoke_cpntf_state_locked(), która usuwa haszowanie wpisu z IDR i
sc_cp_list najpierw (odraczając końcową darmową wersję dowolnemu posiadaczowi) i używaj jej
wszystkie trzy ścieżki unieważnienia. Odpływ działa teraz z list_for_each_entry_safe()
i unieważnia każdy wpis bezwarunkowo, więc kończy się jednym przebiegiem
wpis niezależnie od cs_count. Unhash jest bramkowany
!list_empty(&cps->cp_list); bramka idr_remove() ma znaczenie, ponieważ
idr_alloc_cycle() mogła do tego czasu ponownie użyć so_id. Zachowaj
_free_cpntf_state_locked() tylko dla ścieżki umieszczania posiadacza odniesienia, gdzie a
równoczesne odwołanie mogło już spowodować odłączenie wpisu (jego list_del_init()
wtedy nie ma opcji).
>_ 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