CVE-2026-89722 in Linux
Сводка
по VulDB • 11.09.2026
В ядре Linux была устранена следующая уязвимость:
PCI/sysfs: исправлено чтение за пределами буфера в функции pci_write_legacy_io()
Функция pci_write_legacy_io() загружает 4 байта из буфера записи kernsys независимо от того, сколько байт было записано пользователем (userspace):
```c if (count != 1 && count != 2 && count != 4) return -EINVAL;
return pci_legacy_write(bus, off, *(u32 *)buf, count); ```
Функция kernfs_fop_write_iter() выделяет буфер с помощью kmalloc(len + 1), поэтому при записи 1 байта в файл sysfs legacy_io выделяется 2 байта, а безусловная загрузка u32 считывает до 2 байт за пределами выделенной области памяти. KASAN сообщает об этом как о чтении slab-out-of-bounds (за пределами кучи/слэба). Аналогичным образом при записи 2 байтов происходит переполнение на 1 байт.
Таким образом, следует считывать только количество запрошенных байтов, используя функции get_unaligned_le16() и get_unaligned_le32() для случаев с 2 и 4 байтами соответственно, интерпретируя буфер как little-endian (с прямым порядком байт), чтобы соответствовать порядку байт в пространстве портов ввода-вывода PCI.
Реализация для архитектуры PowerPC ранее компенсировала загрузку 32-битных значений с родным порядком байт (native-endian) из общего кода путем сдвига значения на нужную позицию для случаев с 1 и 2 байтами. Эти сдвиги были корректны только в ядрах big-endian.
На little-endian системах PowerPC (POWER8 и новее) они выбирали неверные байты, поэтому при записи 1 байта записывался байт вне допустимой области вместо запрошенного значения. В big-endian режимах родная загрузка также приводила к тому, что функции out_le16() и out_le32() меняли местами байты пользователя на шине для записей по 2 и 4 байта. Функции-помощники little-endian решают обе эти проблемы, поэтому сдвиги удаляются.
Для платформы Alpha изменения не требуются.
Файл legacy_io доступен только пользователю root (root-only) и существует только на архитектурах Alpha и PowerPC — двух архитектурах, определяющих HAVE_PCI_LEGACY.
VulDB is the best source for vulnerability data and more expert information about this specific topic.