Katalog CVE

CVE-2026-90096

Nieznane
Opublikowano: Przetłumaczono: NVD NIST

Streszczenie

W jądrze Linux w systemie plików FUSE wykryto podatność związaną z zapisem bezpośrednim z flagą O_APPEND. Funkcja fuse_direct_write_iter() używała nieaktualnej pozycji przed sprawdzeniem zapisu, co powodowało unieważnianie błędnego zakresu stron po zapisie. Może to prowadzić do niespójności danych, gdy rozmiar pliku nie jest wyrównany do rozmiaru strony.

Ocena ryzyka

Organizacja może doświadczyć niespójności danych w plikach na systemach FUSE, co może skutkować odczytem starych lub uszkodzonych danych przez aplikacje. W skrajnych przypadkach może to prowadzić do utraty integralności danych lub błędów działania aplikacji korzystających z tych plików.

Rekomendacja

Zaleca się jak najszybsze zastosowanie poprawki dostarczonej przez producenta jądra Linux. Należy zaktualizować jądro do wersji zawierającej fix, a jeśli to niemożliwe, rozważyć ograniczenie użycia zapisów O_APPEND z trybem bezpośrednim na systemach FUSE.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: fuse: invalidate the correct range after O_APPEND direct write fuse_direct_write_iter() captures pos before generic_write_checks(), which moves ki_pos to EOF for O_APPEND writes: fuse_direct_write_iter() { pos = iocb->ki_pos; /* 0 (user-supplied) */ generic_write_checks(); /* ki_pos -> EOF */ fuse_direct_io(); /* writes at EOF, correct */ invalidate(pos, pos + res); /* [0, res) -- wrong */ } The post-write invalidation targets a stale range instead of the actual written range at EOF. This can cause data inconsistency when the file size is not page-aligned. The tail page straddling EOF has a valid portion before EOF that concurrent readers can fault back in during the DIO write window: Tail page (file size X not page-aligned): page_start X (EOF) page_end |--- valid data ----|-- stale --| CPU0 (O_APPEND DIO writer) CPU1 (buffered reader) -------------------------- ---------------------- invalidate [X, X+len) tail page evicted FUSE_WRITE in flight ... read [page_start, X) tail page re-faulted [X, page_end) = stale FUSE_WRITE completes i_size = X + len invalidate [0, len) <- WRONG tail page still cached read [X, X+len) hits stale tail page returns old data Fix by reading pos back from iocb->ki_pos after generic_write_checks(), as generic_file_direct_write() does. Also fix a typo in the comment ("may have" -> "may have competed").

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS