CVE-2026-45985
ŚrednieCVSS 5.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 7 - wyżej niż 7% wszystkich znanych CVE
Streszczenie
W jądrze systemu Linux zidentyfikowano podatność w systemie plików ext4, która występuje podczas alokacji bloków w trybie DIO. Problem polega na tym, że niewłaściwe ustawienie flagi EXT4_GET_BLOCKS_CONVERT może prowadzić do problemów z danymi przestarzałymi.
Ocena ryzyka
Organizacje mogą napotkać problemy z integralnością danych, co może prowadzić do utraty lub uszkodzenia danych w przypadku awarii zapisu.
Rekomendacja
Zaleca się aktualizację jądra systemu Linux, aby usunąć przekazywanie flagi EXT4_GET_BLOCKS_CONVERT podczas dzielenia niewpisanego zakresu przed przesłaniem operacji I/O oraz zapewnienie, że cały zakres zostanie wyzerowany.
Inne podatności w Linux kernel, ext4 filesystem
Zobacz wszystkie- CVE-2026-43067Krytyczne
W jądrze Linuxa rozwiązano podatność w systemie plików ext4, która dotyczyła obsługi przepełnienia podczas wyszukiwania bloków dla plików z mapowaniem pośrednim. Zmiana w kodzie ogranicza alokację bloków do numerów mieszczących się w 32-bitowych numerach bloków.
- CVE-2026-45942Wysokie
W jądrze Linuxa zidentyfikowano i naprawiono problem z niespójnością bitmapy w systemie plików ext4, który występował podczas testów obciążeniowych z użyciem dużych stron pamięci. Problem ten był spowodowany warunkiem wyścigu między migracją stron a modyfikacją bitmapy.
- CVE-2026-45920Wysokie
W jądrze systemu Linux zidentyfikowano podatność związaną z podwójnym dekrementowaniem licznika brudnych klastrów podczas zamykania systemu plików ext4. Problem ten prowadzi do ostrzeżenia o wartości -1 dla licznika brudnych klastrów, co wskazuje na błąd w ścieżce obsługi błędów.
- CVE-2026-45912Średnie
W jądrze systemu Linux zidentyfikowano podatność w systemie plików ext4, która dotyczy buforowania zakresów podczas procesu ich dzielenia. Problemy z buforowaniem mogą prowadzić do pozostawienia nieaktualnych zakresów w drzewie statusów, co skutkuje błędami w zarządzaniu przestrzenią.
- CVE-2026-45899Średnie
W jądrze Linux w systemie plików ext4 wykryto podatność polegającą na tym, że w przypadku niepowodzenia dzielenia zakresu (extent) w drzewie stanu zakresów mogą pozostać nieaktualne wpisy. Prowadzi to do niespójności danych.
- CVE-2026-45858Średnie
W jądrze Linux w systemie plików ext4 wykryto podatność związaną z nieprawidłowym zerowaniem zakresów alokacji podczas dzielenia dużego niezainicjalizowanego zakresu (extent). W pewnych warunkach, gdy operacja dzielenia zakresu nie powiedzie się z powodu braku miejsca, może dojść do pozostawienia nieaktualnych danych (stale data) w zapisanym zakresie, co narusza integralność danych.
- CVE-2024-49960Wysokie
W jądrze Linuxa naprawiono podatność w systemie plików ext4, która dotyczyła użycia po zwolnieniu pamięci (use-after-free) w przypadku nieudanej próby montowania. Problem polegał na tym, że timer s_err_report pozostawał aktywny, co mogło prowadzić do błędów I/O.
- CVE-2024-49889Wysokie
W jądrze Linuxa zidentyfikowano podatność w systemie plików ext4, która może prowadzić do błędu use-after-free w funkcji ext4_ext_show_leaf(). Problem ten występuje, gdy wskaźnik 'path' jest używany po jego zwolnieniu lub ponownym przydzieleniu, co może prowadzić do nieprzewidywalnych zachowań systemu.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O When allocating blocks during within-EOF DIO and writeback with dioread_nolock enabled, EXT4_GET_BLOCKS_PRE_IO was set to split an existing large unwritten extent. However, EXT4_GET_BLOCKS_CONVERT was set when calling ext4_split_convert_extents(), which may potentially result in stale data issues. Assume we have an unwritten extent, and then DIO writes the second half. [UUUUUUUUUUUUUUUU] on-disk extent U: unwritten extent [UUUUUUUUUUUUUUUU] extent status tree |<- ->| ----> dio write this range First, ext4_iomap_alloc() call ext4_map_blocks() with EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT and EXT4_GET_BLOCKS_CREATE flags set. ext4_map_blocks() find this extent and call ext4_split_convert_extents() with EXT4_GET_BLOCKS_CONVERT and the above flags set. Then, ext4_split_convert_extents() calls ext4_split_extent() with EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 and EXT4_EXT_DATA_VALID2 flags set, and it calls ext4_split_extent_at() to split the second half with EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT and EXT4_EXT_MARK_UNWRIT2 flags set. However, ext4_split_extent_at() failed to insert extent since a temporary lack -ENOSPC. It zeroes out the first half but convert the entire on-disk extent to written since the EXT4_EXT_DATA_VALID2 flag set, but left the second half as unwritten in the extent status tree. [0000000000SSSSSS] data S: stale data, 0: zeroed [WWWWWWWWWWWWWWWW] on-disk extent W: written extent [WWWWWWWWWWUUUUUU] extent status tree Finally, if the DIO failed to write data to the disk, the stale data in the second half will be exposed once the cached extent entry is gone. Fix this issue by not passing EXT4_GET_BLOCKS_CONVERT when splitting an unwritten extent before submitting I/O, and make ext4_split_convert_extents() to zero out the entire extent range to zero for this case, and also mark the extent in the extent status tree for consistency.

