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

Сводка

по VulDB • 18.09.2026

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

ext4: использование fsdata для отслеживания состояния записи inline-данных и исправление гонки состояний (race condition).

Вместо проверки текущего состояния inode (`ext4_has_inline_data(inode)` и `ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)`) в обработчиках `write_end`, используется параметр `fsdata` операций адресного пространства для явной передачи состояния, в котором операция `write_begin` подготовила запись.

Поток (например, `ext4_page_mkwrite()`), выполняемый параллельно, может преобразовать inline-данные в extent между вызовами `write_begin` и `write_end`. Если это происходит, обработчики `write_end` ранее пропускали путь завершения записи для inline-данных (`inline write_end path`) и переходили к логике обработки записей на основе extents. Однако, поскольку буферы блоков никогда не выделялись в `write_begin`, это приводило к разыменованию нулевого указателя (NULL pointer dereference) или потере данных, так как `folio_buffers(folio)` был равен NULL.

Определяется флаг EXT4_WRITE_DATA_INLINE (4) как битовый флаг (Bit 2), а параметр fsdata рассматривается как набор битовых флагов, а не взаимоисключающих перечислений, чтобы сохранить независимость состояний пути записи. Это состояние передается через `fsdata`: 1) Функции `ext4_write_begin()` и `ext4_da_write_begin()` устанавливают бит EXT4_WRITE_DATA_INLINE в *fsdata с помощью побитового ИЛИ (bitwise OR), когда inline-запись успешно подготовлена. 2) При входе функция `ext4_write_begin()` сбрасывает бит EXT4_WRITE_DATA_INLINE для безопасной обработки повторных попыток VFS (где `generic_perform_write()` обходит инициализацию fsdata при возврате к выполнению операции). 3) Обработчики write_end выполняют побитовое И (bitwise AND), чтобы проверить, установлен ли бит EXT4_WRITE_DATA_INLINE, и соответственно вызывают вспомогательную функцию завершения записи для inline-данных.

Кроме того, во время буферизированной записи `ext4_write_inline_data_end()` получает блокировку xattr после подготовки записи. Если параллельная ошибка страницы (`ext4_page_mkwrite()`) преобразует inline-данные в extent после того, как обработчики write_end проверили состояние, но до того, как `ext4_write_inline_data_end()` получит блокировку записи xattr, последующая проверка вызовет панику ядра через вызов BUG_ON(!ext4_has_inline_data(inode)).

Чтобы сохранить работоспособность истории git и возможность чистого бисекта (bisectability), в этом же коммите замена проверки BUG_ON в `ext4_write_inline_data_end()` осуществляется на путь обработки ошибок с повторной попыткой. Если inline-данные очищаются после получения блокировки xattr, мы безопасно освобождаем все ресурсы (освобождая iloc.bh, разблокируя/отпуская folio, останавливая активный дескриптор транзакции журнала) и возвращаем 0 (повторная попытка VFS), чтобы позволить общему пути записи выполнить операцию повторно.

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

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

Linux

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

16.09.2026

Раскрытие

17.09.2026

Модерация

принято

Вход

VDB-406996

EPSS

0.00000

KEV

Нет

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

Очень низкий

Источники

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!