NONE

CVE-2026-23085

Обновлено 5 февраля 2026

В ядре Linux устранена следующая уязвимость: irqchip/gic-v3-its: избегать усечения адресов памяти. На 32-битных машинах с CONFIG_ARM_LPAE возможно использование lowmem. выделения должны быть подкреплены адресами физической памяти выше 32-битной ограничение адреса, обнаруженное в ходе экспериментов с большим VMSPLIT конфигурации. Это привело к сбою модели qemu virt в драйвере GICv3, что выделяет объект «itt», используя GFP_KERNEL. Поскольку вся память ниже в этой конфигурации ограничение физического адреса в 4 ГБ находится в ZONE_DMA, kmalloc() по умолчанию использует более высокие адреса для ZONE_NORMAL, а Драйвер ITS хранит физический адрес в 32-битном «длинном беззнаковом» формате. переменная. Вместо этого измените переменную itt_addr на правильный тип phys_addr_t, вместе со всеми другими переменными в этом драйвере, которые содержат физическую адрес. Драйвер gicv5 корректно использует переменные u64, в то время как все остальные irqchip драйверы не вызывают virt_to_phys или подобные интерфейсы. Ожидается, что у других драйверов устройств есть аналогичные проблемы, но исправить эту проблему можно достаточно для загрузки гостя на базе Virtio.

Показать оригинальное описание (английский)

In the Linux kernel, the following vulnerability has been resolved: irqchip/gic-v3-its: Avoid truncating memory addresses On 32-bit machines with CONFIG_ARM_LPAE, it is possible for lowmem allocations to be backed by addresses physical memory above the 32-bit address limit, as found while experimenting with larger VMSPLIT configurations. This caused the qemu virt model to crash in the GICv3 driver, which allocates the 'itt' object using GFP_KERNEL. Since all memory below the 4GB physical address limit is in ZONE_DMA in this configuration, kmalloc() defaults to higher addresses for ZONE_NORMAL, and the ITS driver stores the physical address in a 32-bit 'unsigned long' variable. Change the itt_addr variable to the correct phys_addr_t type instead, along with all other variables in this driver that hold a physical address. The gicv5 driver correctly uses u64 variables, while all other irqchip drivers don't call virt_to_phys or similar interfaces. It's expected that other device drivers have similar issues, but fixing this one is sufficient for booting a virtio based guest.