CVE-2026-89481
NieznaneStreszczenie
W jądrze Linux w sterowniku nvme-tcp funkcja nvme_tcp_handle_r2t() nie sprawdza kierunku żądania, którego dotyczy R2T. Złośliwy kontroler może wysłać R2T dla polecenia READ, a host odpowie, wysyłając bufor docelowy odczytu (zawierający stare dane jądra) do kontrolera. Luka ujawnia pamięć jądra, w tym wskaźniki struct page.
Ocena ryzyka
Ujawnienie poufnych danych z pamięci jądra (host memory disclosure) złośliwemu lub przejętemu kontrolerowi NVMe over TCP. Może prowadzić do wycieku informacji wrażliwych.
Rekomendacja
Zaktualizuj jądro Linux do wersji odrzucającej R2T dla żądań innych niż zapis. Do czasu aktualizacji rozważ ograniczenie zaufania do kontrolerów NVMe over TCP.
Inne podatności w Linux kernel (nvme-tcp)
Zobacz wszystkie- CVE-2026-89482Nieznane
W jądrze Linux w sterowniku nvme-tcp występuje luka polegająca na tym, że odbiór danych C2HData był weryfikowany wyłącznie na podstawie blk_rq_payload_bytes(), bez sprawdzenia req->data_len. Dla operacji WRITE_ZEROES, która nie ma segmentów fizycznych, ale ma niezerowe blk_rq_bytes(), prowadzi to do kopiowania danych do niezainicjalizowanego iteratora i błędu wild-memory-access (KASAN) w _copy_to_iter().
- CVE-2026-89480Nieznane
W jądrze Linux w sterowniku nvme-tcp funkcja nvme_tcp_recv_data() kończy żądanie po odebraniu bieżącego PDU C2HData, nie porównując łącznej liczby odebranych bajtów z długością żądaną przez polecenie. Złośliwy kontroler może odpowiedzieć na odczyt 4096 bajtów tylko 512 bajtami, a żądanie zostanie zgłoszone jako zakończone, ujawniając użytkownikowi 3584 bajty starych danych ze strony. Poprawka zlicza odebrane bajty i odmawia zakończenia niepełnego odczytu.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: nvme-tcp: fix host memory disclosure on R2T for a read command nvme_tcp_handle_r2t() does not check the direction of the request the R2T refers to. A malicious controller can send an R2T for a READ and the host will answer it: nvme_tcp_setup_h2c_data_pdu() builds the H2CData header and nvme_tcp_try_send_data() sends the request's data buffer. That buffer is the READ destination, so its contents go to the controller. The command then completes normally and nothing is logged. Against a test controller that answers every READ with an R2T, a 4096 byte buffered read returned all 4096 bytes, split over two R2Ts. The pages contained stale kernel data, including an array of struct page pointers. Reject an R2T for a request that is not a write.

