В ядре Linux устранена следующая уязвимость:
PCI: mediatek: исправлена утечка домена IRQ, когда порт не включается. Когда mtk_pcie_enable_port() завершается с ошибкой, mtk_pcie_port_free() удаляет порт
из pcie->ports и освобождает структуру портов. Однако домены IRQ установлены
ранее созданные с помощью mtk_pcie_init_irq_domain(), никогда не освобождаются.
Исправьте это, реорганизовав mtk_pcie_irq_teardown() в помощник для каждого порта,
mtk_pcie_irq_teardown_port() и вызывая его из mtk_pcie_setup(), когда
mtk_pcie_enable_port() завершается с ошибкой. Поскольку отключение IRQ должно происходить только в
путь ошибки проверки (во время возобновления дочерние устройства могут иметь активный MSI
сопоставления и контекст NOIRQ запрещают спящие блокировки),
mtk_pcie_enable_port() изменен и теперь возвращает код ошибки, чтобы вызывающие могли
различайте два пути и действуйте соответственно. Об этой проблеме сообщил Сашико при обзоре SoC EcoNet EN7528.
поддерживающая серия.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: PCI: mediatek: Fix IRQ domain leak when port fails to enable When mtk_pcie_enable_port() fails, mtk_pcie_port_free() removes the port from pcie->ports and frees the port structure. However, the IRQ domains set up earlier by mtk_pcie_init_irq_domain() are never freed. Fix this by refactoring mtk_pcie_irq_teardown() into a per-port helper, mtk_pcie_irq_teardown_port(), and calling it from mtk_pcie_setup() when mtk_pcie_enable_port() fails. Since the IRQ teardown must only happen in the probe error path (during resume, child devices may have active MSI mappings and the NOIRQ context prohibits sleeping locks), mtk_pcie_enable_port() is changed to return an error code so callers can distinguish the two paths and act accordingly. This issue was reported by Sashiko while reviewing the EcoNet EN7528 SoC support series.