CVE-2026-45985 in LinuxИнформация

Сводка

по VulDB • 28.05.2026

В ядре Linux устранена следующая уязвимость:

ext4: не устанавливать флаг EXT4_GET_BLOCKS_CONVERT при разбиении перед отправкой операций ввода-вывода (I/O)

При выделении блоков в рамках прямого ввода-вывода (DIO) за пределами текущего конца файла (EOF) и при обратной записи (writeback) с включенным параметром dioread_nolock, устанавливался флаг EXT4_GET_BLOCKS_PRE_IO для разбиения существующего большого неинициализированного экстента (unwritten extent). Однако при вызове функции ext4_split_convert_extents() устанавливался флаг EXT4_GET_BLOCKS_CONVERT, что потенциально могло приводить к проблемам со старыми данными (stale data).

Предположим, у нас есть неинициализированный экстент, а затем DIO записывает его вторую половину.

[UUUUUUUUUUUUUUUU] экстент на диске U: неинициализированный экстент
[UUUUUUUUUUUUUUUU] дерево статусов экстентов
|| ----> DIO записывает этот диапазон

Сначала вызов ext4_iomap_alloc() вызывает ext4_map_blocks() с установленными флагами EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT и EXT4_GET_BLOCKS_CREATE. ext4_map_blocks() находит этот экстент и вызывает ext4_split_convert_extents() с установленными флагами EXT4_GET_BLOCKS_CONVERT и вышеуказанными флагами.

Затем ext4_split_convert_extents() вызывает ext4_split_extent() с установленными флагами EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 и EXT4_EXT_DATA_VALID2, и вызывает ext4_split_extent_at() для разбиения второй половины с флагами EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT и EXT4_EXT_MARK_UNWRIT2. Однако ext4_split_extent_at() не смогла вставить экстент из-за временной нехватки места (-ENOSPC). Она обнуляет первую половину, но преобразует весь экстент на диске в инициализированный (written), поскольку установлен флаг EXT4_EXT_DATA_VALID2, оставляя при этом вторую половину неинициализированной в дереве статусов экстентов.

[0000000000SSSSSS] данные S: старые данные, 0: обнуленные данные
[WWWWWWWWWWWWWWWW] экстент на диске W: инициализированный экстент
[WWWWWWWWWWUUUUUU] дерево статусов экстентов

Наконец, если DIO не удалось записать данные на диск, старые данные во второй половине будут раскрыты, как только запись кэшированного экстента будет удалена.

Исправление этой проблемы заключается в том, чтобы не передавать флаг EXT4_GET_BLOCKS_CONVERT при разбиении неинициализированного экстента перед отправкой операций ввода-вывода, а также заставить функцию ext4_split_convert_extents() обнулять весь диапазон экстентов в данном случае и отмечать экстент в дереве статусов экстентов для обеспечения согласованности.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Ответственный

Linux

Резервировать

13.05.2026

Раскрытие

27.05.2026

Модерация

принято

Вход

VDB-366202

EPSS

0.00032

KEV

Нет

Деятельности

Очень низкий

Источники

Want to know what is going to be exploited?

We predict KEV entries!