Podatności Linux kernel (nfsd)
28 znanych podatności CVE w Linux kernel (nfsd), przetłumaczonych i ocenionych.
- CVE-2026-89706Nieznane
W jądrze Linux w module nfsd nie resetowano weryfikatora zapisu (write verifier) po niepowodzeniu asynchronicznego zapisu wstecznego operacji COPY. Gdy zapis wsteczny się nie powiódł, serwer zgłaszał klientowi NFS_UNSTABLE, ale nie rotował weryfikatora, przez co klient po wykonaniu COMMIT uznawał dane za trwałe, mimo że zapis się nie udał.
- CVE-2026-89705Nieznane
W jądrze Linux funkcja nfsd_dispatch() nie przywracała rq_status_counter do wartości parzystej na wszystkich ścieżkach wyjścia (cache-hit, drop, błąd kodowania). Pozostawiony nieparzysty licznik powodował, że bezblokadowy czytnik w nfsd_nl_rpc_status_get_dumpit() uznawał pola rqstp za stabilne i mógł odczytać dane poza końcem 8-elementowej tablicy ops.
- CVE-2026-89704Nieznane
W jądrze Linux funkcja _nfsd_copy_file_range() próbkowała kursor błędu zapisu wstecznego (dst->f_wb_err) po pętli kopiowania, a nie przed nią. Współbieżne COMMIT lub stabilny WRITE mogły przesunąć kursor, przez co błąd zapisu nie był wykrywany i ustawiano NFSD4_COPY_F_COMMITTED mimo niepowodzenia zapisu.
- CVE-2026-89703Nieznane
W jądrze Linux funkcja nfsd4_drop_revoked_stid() obsługująca FREE_STATEID dla delegacji odwołanych przez administratora nie ustawiała flagi SC_STATUS_FREED przed zwolnieniem cl_lock. Bez tej flagi zwolniona delegacja była dodawana do cl_revoked, co prowadziło do use-after-free przy późniejszym przechodzeniu po tej liście w __destroy_client().
- CVE-2026-89701Nieznane
W jądrze Linux ścieżki dekodowania TIME_DELEG_ACCESS i TIME_DELEG_MODIFY (oparte na xdrgen) zapisywały surową wartość uint32_t nseconds bezpośrednio do tv_nsec bez sprawdzenia warunku nseconds < NSEC_PER_SEC. Złośliwy klient mógł przesłać nieprawidłowy timespec, który propagował się przez notify_change() aż do dysku.
- CVE-2026-89700Nieznane
W jądrze Linux polityka nfsd_sock_nl_policy deklarowała NFSD_A_SOCK_ADDR jako NLA_BINARY bez minimalnej długości. Użytkownik z uprawnieniem CAP_NET_ADMIN mógł wysłać 16-bajtowy adres z sa_family=AF_INET6, powodując 12-bajtowy odczyt poza granicami bufora w trzech miejscach (rpc_cmp_addr_port, svc_find_listener, kernel_bind).
- CVE-2026-89699Nieznane
W jądrze Linux funkcja nfsd4_decode_create() przyjmowała nieograniczoną wartość cr_datalen z sieci dla celów dowiązań symbolicznych NF4LNK, umożliwiając klientowi wymuszenie alokacji kmalloc o rozmiarze do maksymalnego ładunku RPC (kilka MiB) na każdą operację COMPOUND. VFS odrzucał zbyt duże cele z ENAMETOOLONG, ale alokacja już się odbywała.
- CVE-2026-89698Nieznane
W jądrze Linux struktura nfsd_genl_rqstp deklarowała pola rq_daddr i rq_saddr jako zwykłe struct sockaddr (16 bajtów). Przy połączeniu klienta IPv6 funkcja nfsd_genl_rpc_status_compose_msg() rzutowała te pola na struct sockaddr_in6 (28 bajtów), odczytując 8 bajtów poza końcem pola i wysyłając do przestrzeni użytkownika obcięty adres IPv6 wraz z fragmentem rq_flags przez netlink.
- CVE-2026-89697Nieznane
W jądrze Linux gałąź BOTH_TIME_SET w nfsd_proc_setattr() wywoływała fh_verify() wcześnie, aby setattr_prepare() mógł sprawdzić dentry. Powodowało to pominięcie fh_want_write() w nfsd_setattr(), przez co notify_change() działał bez referencji zapisu do montowania.
- CVE-2026-89696Nieznane
W jądrze Linux w module nfsd występuje luka polegająca na tym, że po operacji FOREIGN PUTFH kolejne operacje mogą być wykonywane mimo że fh_dentry ma wartość NULL. Zdalny klient NFSv4.2 może spreparować żądanie COMPOUND, które doprowadzi do dereferencji wskaźnika NULL w wątku jądra nfsd. Problem dotyczy konfiguracji z włączonym CONFIG_NFSD_V4_2_INTER_SSC.
- CVE-2026-89695Nieznane
W jądrze Linux w module nfsd funkcja nfsd4_decode_posixacl() przyjmuje od klienta nieograniczoną liczbę wpisów ACL i przekazuje ją do sortowania bąbelkowego o złożoności O(n^2). Klient może wybrać dowolnie dużą wartość, powodując nadmierne zużycie CPU na serwerze. Brakuje symetrycznego sprawdzenia limitu NFS_ACL_MAX_ENTRIES, które istnieje po stronie kodera.
- CVE-2026-89694Nieznane
W jądrze Linux w module nfsd funkcja manage_cpntf_state() na ścieżce OFFLOAD_CANCEL zwalniała stan copy-notify bez sprawdzenia właściciela. Klucz wyszukiwania jest przewidywalny, a embedded clientid jest stały dla danej sieci, więc każdy uwierzytelniony klient NFSv4.2 mógł anulować i zwolnić stan copy-notify innego klienta. Poprawka porównuje clientid tworzącego z clientid żądającego i zwraca nfserr_bad_stateid w przypadku niezgodności.
- CVE-2026-89693Nieznane
W jądrze Linux w module nfsd funkcja nfsd4_create() zapisuje wynik nfsd4_acl_to_attr() w zmiennej status, ale blok switch(create->cr_type) bezwarunkowo go nadpisuje w każdej gałęzi. Błędy tłumaczenia ACL są po cichu odrzucane, a operacja CREATE kończy się sukcesem bez żądanej listy ACL. Poprawka dodaje wczesne sprawdzenie wyniku, analogicznie do nfsd4_setattr().
- CVE-2026-89692Nieznane
W jądrze Linux w module nfsd funkcja nfsd_break_one_deleg() ustawia bit NFSD4_CALLBACK_RUNNING, ale gdy próba zakolejkowania recall nie powiedzie się, bit nie jest czyszczony. Powoduje to trwałe zablokowanie kolejnych prób zerwania delegacji na tym samym obiekcie, przez co delegacja nigdy nie zostaje zerwana, a konfliktowe otwarcie lub blokada zawiesza się. Poprawka czyści bit w gałęzi !queued.
- CVE-2026-89691Nieznane
W jądrze Linux w module nfsd funkcja nfsd4_release_compoundargs() resetuje wskaźnik args->ops do tablicy iops[8], ale nie zeruje args->opcnt, który może wynosić do 200 dla NFSv4.1+. Gdy rq_status_counter utknie na wartości nieparzystej, handler dumpit czyta do 16 wpisów z args->ops[], wykraczając poza tablicę i ujawniając przyległą pamięć slab do przestrzeni użytkownika przez netlink. Poprawka zeruje opcnt bezwarunkowo.
- CVE-2026-89690Nieznane
W jądrze Linux w module nfsd bufor args->ops jest zwalniany synchronicznie przez vfree() w nfsd4_release_compoundargs(), podczas gdy handler dumpit netlink rpc_status odczytuje ten bufor pod rcu_read_lock. Współbieżne zakończenie compound może zwolnić bufor w trakcie odczytu, powodując use-after-free na pamięci vmalloc. Poprawka zastępuje vfree() przez kvfree_rcu_mightsleep(), odraczając zwolnienie o okres karencji RCU.
- CVE-2026-89689Nieznane
W jądrze Linux w module nfsd wykryto podatność use-after-free w funkcji nfsd4_sequence(). Gdy mechanizm zmniejszania sesji (shrinker) obniży se_target_maxslots poniżej se_fchannel.maxreqs, funkcja free_session_slots() może zwolnić slot aktualnie używany przez klienta, ponieważ nie sprawdza seq->slotid ani flagi NFSD4_SLOT_INUSE. Prowadzi to do uszkodzenia pamięci poprzez zapis do zwolnionego bufora sl_data[].
- CVE-2026-89688Nieznane
W jądrze Linux w module nfsd funkcja nfs4_preprocess_seqid_op() przy błędzie -EAGAIN z nfsd4_cstate_assign_replay() zwalniała referencję do stateowner, której nigdy nie pobrała, jednocześnie wyciekając referencję do stid. Prowadzi to do niedomiaru licznika referencji stateowner i use-after-free oraz może zablokować równoległe nfsd4_close_open_stateid(). Poprawka zwalnia referencję do stid przed ponowną próbą.
- CVE-2026-89687Nieznane
W jądrze Linux w module nfsd funkcja nfsd_file_do_acquire() mogła użyć pliku zwróconego przez dentry_create(), który nie został faktycznie otwarty, ponieważ ->atomic_open może zwrócić sukces przez finish_no_open(). Sytuacja jest bardzo mało prawdopodobna, ale poprawka wymaga, aby nfsd używał pliku tylko gdy ustawiona jest flaga FMODE_OPENED.
- CVE-2026-89686Nieznane
W jądrze Linux w funkcji nfsd4_alloc_layout_stateid występuje wyścig (race condition) — odczyt fp->fi_deleg_file odbywa się bez trzymania fi_lock, gdy rodzicielski stateid jest delegacją. Równoległe odebranie delegacji przez laundromat może wyczyścić fi_deleg_file pod fi_lock, powodując zwrócenie NULL przez nfsd_file_get() i wywołanie BUG_ON. Wyścig jest osiągalny przez klienta: dwa klienty NFS mogą go wywołać, gdy jeden trzyma delegację, a drugi otwiera ten sam plik wymuszając recall.
- CVE-2026-89685Nieznane
W jądrze Linux funkcja clients_still_reclaiming() oblicza termin na podstawie nn->boot_time (CLOCK_REALTIME) i porównuje go z ktime_get_boottime_seconds() (CLOCK_BOOTTIME), przez co porównanie jest zawsze fałszywe. W efekcie dowolny klient może utrzymywać serwer w stanie grace w nieskończoność, wysyłając żądania CLAIM_PREVIOUS OPEN, blokując wszystkie operacje nie-reclaim dla pozostałych klientów.
- CVE-2026-89684Nieznane
W jądrze Linux funkcja nfs4_alloc_init_cpntf_state() publikowała nowy wpis cpntf w IDR s2s_cp_stateids w jednej sekcji s2s_cp_lock, a następnie ponownie brała blokadę, aby dodać go do p_stid->sc_cp_list. W tej luce wpis był osiągalny przez so_id, ale cp_list pozostawał wyzerowany, co pozwalało wyścigowemu OFFLOAD_CANCEL wywołać list_del() na zerowej liście i uszkodzić serwer (oops).
- CVE-2026-89683Nieznane
W jądrze Linux funkcja nfsd_set_fh_dentry() wycieka referencję do dentry z exportfs_decode_fh_raw(), gdy przypadki NFS3_FHSIZE lub NFS_FHSIZE wykryją NFSEXP_V4ROOT i przejdą do etykiety out. Etykieta out wywołuje exp_put(), ale nigdy dput(dentry), a fhp->fh_dentry nie został przypisany, więc fh_put() nie może tego skompensować. Spreparowany uchwyt pliku NFSv3 wymierzony w fsid eksportu V4ROOT wywołuje wyciek przy każdym żądaniu.
- CVE-2026-89682Nieznane
W jądrze Linux funkcja nfsd_file_dispose_list_delayed() odkłada fput() do wątków usługi nfsd przez kolejkę freeme per-net, która znajduje się w osobno alokowanej strukturze nfsd_fcache_disposal zwalnianej podczas niszczenia przestrzeni nazw sieci. Globalny shrinker, laundrette i callbacki fsnotify mogą nadal odwoływać się do tego wskaźnika, powodując use-after-free.
- CVE-2026-89681Nieznane
W jądrze Linux rdzeń workqueue czyści WORK_STRUCT_PENDING przed wywołaniem callbacku, więc delayed_work_pending() w lm_breaker_timedout() może zwrócić false, gdy worker fence już działa. Pozwala to breakerowi pobrać dodatkową referencję sc_count i zaplanować nowego workera, który łączy się z już działającym. Nadmiarowa referencja nigdy nie jest zwalniana, co powoduje wyciek layout stateid.
- CVE-2026-89667Nieznane
W jądrze Linux w module nfsd występuje wyścig (race condition) między mechanizmami shrinker, GC oraz fsnotify/lease a zamykaniem sieci per-net w filecache. Plik nfsd_file może zostać usunięty z rhashtable i przeniesiony na listę dispose, zanim nfsd_file_cache_shutdown_net() zdąży go przetworzyć, co prowadzi do wycieku pliku i powiązanego stanu. Poprawka rozszerza zakres blokady nfsd_gc_lock na wszystkie trzy ścieżki wywołujące nfsd_file_dispose_list_delayed() oraz dodaje barierę spinlock w funkcji zamykającej sieć.
- CVE-2026-89664Nieznane
W jądrze Linux w module nfsd występuje wyciek pamięci (referencji) obiektów posix_acl. Gdy klient NFS wysyła nieprawidłową operację OPEN zawierającą atrybuty POSIX ACL, funkcja nfsd4_open() nie jest wywoływana, przez co zaalokowane struktury posix_acl nie są zwalniane. Problem dotyczy również ścieżki odtwarzania (replay) operacji v4.0.
- CVE-2022-43945Wysokie
Implementacja NFSD w jądrze Linuxa przed wersjami 5.19.17 i 6.0.2 jest podatna na przepełnienie bufora. Klient może zmusić bufor wysyłania do zmniejszenia, wysyłając wiadomość RPC z nieprawidłowymi danymi, co prowadzi do zapisu poza przydzieloną przestrzenią bufora.

