CVE-2026-89586 in Linux
Сводка
по VulDB • 12.09.2026
В ядре Linux была устранена следующая уязвимость:
ata: libata-scsi: исправление DSM TRIM для размеров секторов, превышающих 2048 байт
Функция ata_scsi_write_same_xlat() преобразует команду SCSI WRITE SAME с установленным битом UNMAP в команду ATA DATA SET MANAGEMENT TRIM. Дескриптор TRIM формируется функцией ata_format_dsm_trim_descr() в буфере промежуточного хранения ata_scsi_rbuf размером 2048 байт, а количество скопированных байтов сравнивается вызывающей стороной с логическим размером сектора:
size = ata_format_dsm_trim_descr(scmd, trmax, block, n_block); if (size != len) /* len == sdp->sector_size */ goto invalid_param_len;
Функция ata_format_dsm_trim_descr() ограничивает длину копирования значением ATA_SCSI_RBUF_SIZE (2048). На устройстве с логическим размером сектора, превышающим это значение (например, на устройстве 4Kn, где sector_size == 4096), функция никогда не может вернуть значение больше 2048, тогда как вызывающая сторона ожидает возврата значения sector_size. Следовательно, сравнение всегда завершается неудачей, и каждая операция TRIM отклоняется с ошибкой «Parameter list length error», а при каждой попытке возникает предупреждение WARN_ON(). Таким образом, функция TRIM / discard полностью неработоспособна на таких устройствах.
Размер дескриптора был неверно установлен в соответствии с логическим размером сектора. Полезная нагрузка DSM TRIM представляет собой список страниц по 512 байт, каждая из которых может содержать до ATA_MAX_TRIM_RNUM (64) записей диапазона LBA, и не зависит от логического размера сектора. Страница VPD Block Limits уже объявляет одну такую страницу как максимальную длину WRITE SAME (65535 * ATA_MAX_TRIM_RNUM логических блоков), поэтому слой блочных устройств никогда не отправляет запросы, требующие более одной страницы.
Необходимо генерировать ровно одну 512-байтовую страницу независимо от логического размера сектора и передавать только эту страницу (COUNT == 1). Для устройства с сектором размером 512 байт это остается без изменений; для устройств с большим логическим размером сектора теперь операции выполняются успешно вместо того, чтобы каждая операция TRIM завершалась ошибкой.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.