CVE-2026-89706
NieznaneStreszczenie
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ł.
Ocena ryzyka
Może dojść do cichej utraty danych — klient NFS uznaje skopiowane dane za trwale zapisane, choć w rzeczywistości zapis wsteczny zakończył się błędem. Narusza to kontrakt trwałości UNSTABLE+COMMIT z RFC 7862 i RFC 8881.
Rekomendacja
Zaktualizować jądro Linux do wersji zawierającej poprawkę, która rotuje nn->writeverf w miejscu wykrycia błędu zapisu wstecznego (z filtrowaniem -EAGAIN i -ESTALE).
Inne podatności w Linux kernel (nfsd)
Zobacz wszystkie- 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.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: nfsd: Reset write verifier when async COPY writeback fails Async COPY captures nn->writeverf at request time and reports it to the client via CB_OFFLOAD after the worker kthread completes. When the post-copy vfs_fsync_range() or filemap_check_wb_err() in _nfsd_copy_file_range() reports an error, the worker correctly leaves NFSD4_COPY_F_COMMITTED clear so that CB_OFFLOAD encodes wr_stable_how as NFS_UNSTABLE, but the server's write verifier is not rotated. A client that receives NFS_UNSTABLE in CB_OFFLOAD follows up with COMMIT to make the copied data durable. With the verifier unchanged, COMMIT returns the same value the client just received via CB_OFFLOAD, and the client concludes the copy is durable -- silently dropping the data whose writeback in fact failed. This violates the UNSTABLE+COMMIT durability contract (RFC 7862 section 15.1, RFC 8881 section 18.32) and matches the bug just fixed in nfsd_vfs_write() and nfsd_commit(). Rotate nn->writeverf at the writeback-failure site. The async COPY worker has no svc_rqst, so commit_reset_write_verifier() is not available here; calling nfsd_reset_write_verifier() directly mirrors the trace-less reset already used by nfsd_file_check_write_error() for the same purpose. Filter out -EAGAIN and -ESTALE, matching commit_reset_write_verifier(), since neither indicates a durable-storage failure.

