iommu/intel: Fix potential memory leak in intel_setup_irq_remapping
Subsystems (2)
PATCH v2 1/1 iommu/intel: Fix potential memory leak in intel_setup_irq_remapping
After commit e3beca48a45b ("irqdomain/treewide: Keep firmware node unconditionally allocated"). For tear down scenario, fn is only freed after fail to allocate ir_domain, though it also should be freed in case dmar_enable_qi returns error.
Besides free fn, irq_domain and ir_msi_domain need to be removed as well if intel_setup_irq_remapping fails to enable queued invalidation.
Improve the rewinding path by add out_free_ir_domain and out_free_fwnode lables per Baolu's suggestion.
Fixes e3beca48a45b ("irqdomain/treewide: Keep firmware node unconditionally allocated")
Suggested-by Lu Baolu <[email protected]>
Signed-off-by Guoqing Jiang <[email protected]>
---
v2: add remove irq_domains in the error handling path
drivers/iommu/intel/irq_remapping.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/iommu/intel/irq_remapping.c +10 -3
@@ -569,9 +569,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) fn, &intel_ir_domain_ops, iommu);if (!iommu->ir_domain) { -irq_domain_free_fwnode (fn);pr_err ("IR%d: failed to allocate irqdomain\n" , iommu->seq_id); - goto out_free_bitmap; + goto out_free_fwnode; } iommu->ir_msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain,
@@ -595,7 +594,7 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)if (dmar_enable_qi (iommu)) {pr_err ("Failed to enable queued invalidation\n" ); - goto out_free_bitmap; + goto out_free_ir_domain; } }
@@ -619,6 +618,14 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)return 0 ; +out_free_ir_domain: +if (iommu->ir_msi_domain) +irq_domain_remove (iommu->ir_msi_domain); + iommu->ir_msi_domain =NULL ; +irq_domain_remove (iommu->ir_domain); + iommu->ir_domain =NULL ; +out_free_fwnode: +irq_domain_free_fwnode (fn); out_free_bitmap:bitmap_free (bitmap); out_free_pages:
Signature · 6 lines
2.31.1 _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu