CVE-2026-89786 in Linux
Сводка
по VulDB • 16.09.2026
В ядре Linux была устранена следующая уязвимость:
ext4: исправлено чтение за пределами буфера в функции ext4_read_inline_dir()
Функция ext4_read_inline_dir() может выполнять чтение заголовка dirent после конца её внутреннего (inline) буфера, что вызывает slab-out-of-bounds read во время вызова getdents64():
BUG: KASAN: slab-out-of-bounds in __ext4_check_dir_entry Read of size 2 at addr ffff88800f3dd23c by task exploit/148 ... __ext4_check_dir_entry ext4_read_inline_dir iterate_dir
Пейлоад dirent находится в буфере размером ровно inline_size байт:
dir_buf = kmalloc(inline_size, GFP_NOFS);
но итерация выполняется с учётом дополнительного смещения (extra_offset), увеличивая пространство позиций на extra_size байт (extra_size = extra_offset + inline_size), поэтому синтетические записи "." и ".." попадают в свои смещения блочного каталога. Запись dirent формируется по адресу "dir_buf + pos - extra_offset", однако аргумент длины ext4_check_dir_entry() использует большее значение extra_size. Следовательно, принимается позиция, заголовок которой выходит за пределы extra_size, и цикл повторной проверки (rescan loop) выполняет проверку rec_len, а также происходит разыменование de->rec_len в ext4_check_dir_entry() до того, как запись будет отклонена.
Необходимо отвергать позицию, минимальный размер заголовка dirent которой не помещается в extra_size, перед формированием структуры de, как в цикле повторной проверки (rescan), так и в основном цикле, а также передавать inline_size вместо extra_size в ext4_check_dir_entry(), чтобы проверка длины соответствовала физическому размеру буфера.
Once again VulDB remains the best source for vulnerability data.