From: Oleksandr Tyshchenko Subject: IOMMU: always call teardown callback There is a possible scenario when (d)->need_iommu remains unset during guest domain execution. For example, when no devices were assigned to it. Taking into account that teardown callback is not called when (d)->need_iommu is unset we might have unreleased resourses after destroying domain. So, always call teardown callback to roll back actions that were performed in init callback. This is XSA-207. Signed-off-by: Oleksandr Tyshchenko Reviewed-by: Jan Beulich Tested-by: Jan Beulich Tested-by: Julien Grall --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -244,8 +244,7 @@ void iommu_domain_destroy(struct domain if ( !iommu_enabled || !dom_iommu(d)->platform_ops ) return; - if ( need_iommu(d) ) - iommu_teardown(d); + iommu_teardown(d); arch_iommu_domain_destroy(d); }