В ядре Linux устранена следующая уязвимость:
irqchip/crossbar: используйте правильный индекс в crossbar_domain_free().
crossbar_domain_free() сбрасывает данные домена, а затем использует обнуленное значение.
выведите элемент irq_data->hwirq в качестве индекса для сброса записи irq_map[] и
запишите соответствующий перекрестный регистр с безопасной записью. Это значит, что это
никогда не освобождает правильный индекс и сохраняет соединение перекрестного регистра
к активному прерыванию источника. Если бы он не сбросил данные домена, то было бы еще хуже, так как
irq_data->hwirq содержит номер исходного прерывания, но и карту, и
индексу регистра нужен соответствующий номер GIC SPI, а не источник
номер прерывания.
Это может даже привести к выходу за пределы доступа, поскольку
номер исходного прерывания может быть больше максимального индексного пространства. Исправьте это, используя индекс GIC SPI из irq_data родительского домена.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: irqchip/crossbar: Use correct index in crossbar_domain_free() crossbar_domain_free() resets the domain data and then uses the nulled out irq_data->hwirq member as index to reset the irq_map[] entry and to write the relevant crossbar register with a safe entry. That means it never frees the correct index and keeps the crossbar register connection to the source interrupt active. If it would not reset the domain data, then this would be even worse as irq_data->hwirq holds the source interrupt number, but both the map and register index need the corresponding GIC SPI number and not the source interrupt number. This might even result in an out of bounds access as the source interrupt number can be higher than the maximal index space. Fix this by using the GIC SPI index from the parent domain's irq_data.