В ядре Linux устранена следующая уязвимость:
cifs: исправлено опустошение loff_t в cifs_remap_file_range(), когда len == 0
При len == 0 (клонирование в EOF) эффективная длина вычисляется как:
len = src_inode->i_size - выключено;
Если off > i_size, это отрицательное значение loff_t, искажающее ByteCount.
в запросе FSCTL_DUPLICATE_EXTENTS_TO_FILE и инвертируем диапазон
в filemap_write_and_wait_range(). Существующая проверка off >= i_size
срабатывает только после того, как ioctl уже отправлен. Снимок i_size_read() один раз для проверки границ и длины
расчет, исключающий TOCTOU и риск разрыва 32-битного чтения.
Отклонить
off > src_size с -EINVAL. Считайте off == src_size недействующим,
соответствует __generic_remap_file_range_prep().
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: cifs: fix loff_t underflow in cifs_remap_file_range() when len == 0 With len == 0 (clone to EOF), the effective length is computed as: len = src_inode->i_size - off; If off > i_size, this is a negative loff_t, corrupting the ByteCount in the FSCTL_DUPLICATE_EXTENTS_TO_FILE request and inverting the range in filemap_write_and_wait_range(). The existing off >= i_size check fires only after the ioctl has already been sent. Snapshot i_size_read() once for both the bounds check and the length calculation, eliminating the TOCTOU and 32-bit torn-read risk. Reject off > src_size with -EINVAL. Treat off == src_size as a no-op, consistent with __generic_remap_file_range_prep().
Характеристики атаки
Последствия
Строка CVSS v3.1